JDK8接口中新增的方法
- JDK7以前接口中只能定义抽象方法
- JDK8接口中可以定义有方法体的方法(默认、静态)
JDK8以后接口中新增的方法
- 允许在接口中定义默认方法,需要使用关键字 default 修饰 (作用:解决接口升级的问题)
- 接口中默认方法的定义格式
- 格式:public default 返回值类型 方法名(参数列表){}
- 范例:public default void show() {}
- 允许在接口中定义静态方法,需要用static修饰
- 接口中静态方法的定义格式
- 格式:public static 返回值类型 方法名(参数列表) {}
- 范例:public static void show(){}
- 注意事项:静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
- public可以省略,static不能省略
接口中默认方法的注意事项:
- 默认方法不是抽象方法,所以不强制重写,但是如果被重写,重写的时候去掉default关键字
- public 可以省略 , default 不能省略
- 如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写
public interface Inter{
public abstract int method();
// 小弟们,规则定义好了
public abstract int method2();
// 又加了一个规则
}
接口静态方法的注意事项
- 静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
- public可以省略,static不能省略,否则也会被当成抽象方法,正如默认方法default不能省略
JDK9新增的私有方法
(其出现是为了解决JDK8中的默认方法和静态方法有重复的代码问题需要抽取出来)
此方法只为Inter接口提供服务,不需要外类访问,故私有化
普通私有方法(给默认方法服务)
- private 返回值类型 方法名(参数列表){}
- private void show() {} 不加default关键字 但是给默认方法服务的
静态的私有方法(给静态方法服务)
- private static 返回值类型 方法名 (参数列表){} 为静态方法服务的
接口的应用
多个类可能会用到同样的的接口
对于实现类来说,想要让Javabean实现什么功能(拥有什么行为),就去实现什么接口
可以把接口当做各种各样行为的规则
接口类型 j = new 实现类对象();(运行时也会遵守 编译看左边 ,运行看右边的 原则)
- 接口代表规则,是行为的抽象,想要让那个类拥有一个行为,就让这个类实现对应的接口就可以了
- 当一个方法的参数是接口(规则,行为)时,我们可以传递接口所有实现类的对象,这种方式称之为接口多态
适配器设计模式
- 设计模式(Design Pattern)是一套反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性,程序的重用性简单来说,设计模式就是各种套路
- 适配器设计模式:解决接口与接口实现类的之间的矛盾问题
- 当一个接口中抽象方法过多,但是我们只要使用其中的一部分时候,就可以采用适配器设计模式
- 编写中间类XXX(接口名)Adapter,实现对应接口,对接口中的抽象方法进行空实现
- 让真正的实现类继承中间类,并重写需要用的方法
- 为了避免其他类创建适配器类的对象,中间的适配器类需要用 abstract 修饰
原理:间接继承