接口、lambda表达式与内部类

接口

  1. 接口的概念
    接口使用interface关键字来定义。 接口中的所有方法自动地属于public。
  2. 接口的特性
    接口中的域将被自动设为public static final。
    接口可以多实现,类不可以多继承。
  3. 接口与抽象类
    初学时,觉得抽象类和接口的区分程度不是大
  4. 静态方法
    在Java SE 8中,允许在接口中增加静态方法
  5. 默认方法
    可以为接口方法提供一个默认实现。必须用default修饰符标记这样一个方法。
  6. 解决默认方法冲突
    1)超类优先
    2)接口冲突

接口示例

  1. 接口与回调
  2. Comparator接口
public interface Comparator {
    int compare(T first, T second);
}
  1. 对象克隆
    Cloneable只是一个标记接口,要实现clone()方法的类必须实现该接口。 默认是浅拷贝。

lambda表达式

  1. 为什么引入lambda表达式
    lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。
  2. lambda表达式的语法
    另外写一系列关于Java8新特性的博客出来。
  3. 再谈Comparator
    可以使用lambda表达式来引用该接口中的静态比较器

内部类

内部类是定义在另一个类中的类。
为什么需要内部类呢?

  • 内部方法可以访问该类定义所在的作用域中的数据,包括私有数据。
  • 内部类可以对同一个包中的其他类隐藏起来。
  • 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
  1. 使用内部类访问对象状态
    内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域
    只有内部类可以是私有类
  2. 内部类的特殊语法规则
    外围类引用的语法:OuterClass.this
    在外围类的作用域之外,访问内部类的语法:OuterClass.InnerClass
  3. 内部类是否有用、必要和安全
  4. 局部内部类
    局部类定义在方法中。 局部类不能用public或private访问说明符进行声明,它的访问域被限定在声明这个局部类的块中。
  5. 由外部方法访问变量
    局部类还可以访问局部变量。 不过那些局部变量必须为事实上的final。
  6. 匿名内部类
    创建一个类的对象,不命名,这种类称为匿名内部类。
  7. 静态内部类
    使用static关键字修饰的内部类,称为静态内部类。
    声明在接口中的内部类自动成为static和public类。

代理(动态代理)

利用动态代理可以在运行时创建一个实现了一组给定接口的新类。

  1. 何时使用代理
    假设有一个表示接口的Class对象(有可能只包含一个接口),它的确切类型在编译时无法知道。
  2. 创建代理对象
    要想创建一个代理对象,需要使用Proxy类的newProxyInstance方法。这个方法有三个参数:
  • 一个类加载器(class loader)
  • 一个Class对象数组,每个元素都是需要实现的接口。
  • 一个调用处理器
  1. 代理类的特性

你可能感兴趣的:(接口、lambda表达式与内部类)