接口
- 接口的概念
接口使用interface关键字来定义。 接口中的所有方法自动地属于public。 - 接口的特性
接口中的域将被自动设为public static final。
接口可以多实现,类不可以多继承。 - 接口与抽象类
初学时,觉得抽象类和接口的区分程度不是大 - 静态方法
在Java SE 8中,允许在接口中增加静态方法 - 默认方法
可以为接口方法提供一个默认实现。必须用default修饰符标记这样一个方法。 - 解决默认方法冲突
1)超类优先
2)接口冲突
接口示例
- 接口与回调
- Comparator接口
public interface Comparator<T> {
int compare(T first, T second);
}
- 对象克隆
Cloneable只是一个标记接口,要实现clone()方法的类必须实现该接口。 默认是浅拷贝。
lambda表达式
- 为什么引入lambda表达式
lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。 - lambda表达式的语法
另外写一系列关于Java8新特性的博客出来。 - 再谈Comparator
可以使用lambda表达式来引用该接口中的静态比较器
内部类
内部类是定义在另一个类中的类。
为什么需要内部类呢?
- 内部方法可以访问该类定义所在的作用域中的数据,包括私有数据。
- 内部类可以对同一个包中的其他类隐藏起来。
- 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
- 使用内部类访问对象状态
内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域
只有内部类可以是私有类 - 内部类的特殊语法规则
外围类引用的语法:OuterClass.this
在外围类的作用域之外,访问内部类的语法:OuterClass.InnerClass - 内部类是否有用、必要和安全
- 局部内部类
局部类定义在方法中。 局部类不能用public或private访问说明符进行声明,它的访问域被限定在声明这个局部类的块中。 - 由外部方法访问变量
局部类还可以访问局部变量。 不过那些局部变量必须为事实上的final。 - 匿名内部类
创建一个类的对象,不命名,这种类称为匿名内部类。 - 静态内部类
使用static关键字修饰的内部类,称为静态内部类。
声明在接口中的内部类自动成为static和public类。
代理(动态代理)
利用动态代理可以在运行时创建一个实现了一组给定接口的新类。
- 何时使用代理
假设有一个表示接口的Class对象(有可能只包含一个接口),它的确切类型在编译时无法知道。 - 创建代理对象
要想创建一个代理对象,需要使用Proxy类的newProxyInstance方法。这个方法有三个参数:
- 一个类加载器(class loader)
- 一个Class对象数组,每个元素都是需要实现的接口。
- 一个调用处理器
- 代理类的特性