接口
接口,lambda表达式与内部类
- 接口
- lambda表达式
- 内部类
- 服务加载器 (null)
- 代理
接口:
使用关键字: interface (定义接口), implements (实现接口)
接口中的方法自动为public,写接口时不需要赋予public权限词
实现接口需要实现其全部方法
interface A;
class B implements A;
A a = new A(); //错误
A b;
b = new B(); //正确,可以声明接口变量,实例化为实现接口的对象
java是单继承,每个类只能有一个超类,但能实现很多接口
*使用 static ,private 关键词创造静态私有方法
使用 default 关键字创造默认方法,可以直接在接口中提供默认实现
public interface Comparable<T>{
default int compareTo(T other){ return 0; }
}
默认方法冲突:
- 超类优先:如果超类提供了一个具体方法,同名且有相同参数的默认方法会被忽略
- 接口冲突:两个接口提供了同名同参的方法时,必须覆盖这个方法依解决问题(声明实现其中一个)
*lambda表达式:
目的: 方便的传递代码块
// 有参数lambda表达式
(String first, String second) ->
{
if(first.length() < second.length()) return -1;
else if(first.length() > second.length) return 1;
else return 0;
}
// 无参数lambda表达式
() ->
{
for(int i=0; i<100; i++)
System.out.println(i);
}
//方法引用 (::)
...
//构造器引用 (new)
Comparing比较器
*内部类:
内部类是定义在另一个类中的类,可以简洁的回调:
- 内部类对同一个包中的其他类隐藏
- 内部类方法可以访问定义这个类的作用域中的数据,包括原有的私有数据
外围类引用:OuterClass.this
局部内部类:
不仅在类中,同时在局部(方法)中定义类,被称为局部内部类
匿名内部类:
直接new对象并给定义(属性方法)不用设类名
静态内部类:
将内部类声明为static就不会产生引用
服务加载器:
null
代理:
代理类包含以下方法:
- 指定接口所需要的全部方法
- Object类中的全部方法,如toString,equals等
创建代理对象需要使用 Proxy 类的newProxyInstance方法,对应的三个参数为:
- 一个类加载器 (class loader)
- 一个Class对象数组
- 一个调用处理器
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 IT蛋的个人博客!