1.接口
(1)接口
接口就是一个规则,接口不代表一类事物,接口是对行为的抽象
(2)定义和使用
1.接口用关键字interface来定义
public interface 接口名 {}
2.接口不能实例化
3.接口和类之间是实现关系,通过implements关键字表示
public class 类名 implements 接口名 {}
4.接口的子类(实现类)(1)要么重写接口中的所有抽象方法
(2)要么子类本身就是抽象类
5.接口类的实现关系,可以单实现,也可以多实现
public class 类名 implements 接口名1,接口名2 {}
6.实现类还可以在继承一个类的同时实现多个接口
public class 类名 extends 父类 implements 接口名1,接口名2 {}
(3)接口成员的特点
1.成员变量
(1)成员变量只能是常量
(2)默认修饰符:public static final
2.构造方法
在接口中没有构造方法
3.成员方法
(1)接口只能是抽象方法
(2)默认修饰符:public abstract
(3)扩展:JDK7以前接口只能定义抽象方法
JDK8的新特性:接口中可以定义有方法体的方法
JDK9的新特性:接口中可以定义私有方法
(4)接口和类之间的关系
1.类和类
类和类是继承关系,只能单继承,不能多继承,但是可以多层继承
2.类和接口
类和接口是实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
3.接口和接口
接口和接口是继承关系,可以单继承,也可以多继承,如果实现类实现了最下面的子接口时需要重写所有的方法
(5)JDK8开始接口中新增的方法
1.默认方法
(1)允许在接口中定义默认方法,需要使用关键字default修饰,可以有效的解决接口升级问题
(2)接口中默认方法的定义格式:public default 返回值类型 方法名(参数列表) { }
(3)默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候去掉default关键字
(4)public是默认修饰符可以省略,但是default不能省略
(5)如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写
2.静态方法
(1)允许在接口中定义静态方法,需要用static修饰
(2)格式:public static 返回值类型 方法名(参数列表){ }
(3)静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
(4)public可以省略,static不能省略
(6)JDK9新增的方法
1.私有方法
格式:private 返回值类型 方法名(参数列表){ }
2.静态私有方法
格式:private static 返回值类型 方法名(参数列表){ }
(7)接口的应用
1.接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了
2.当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态
(8)适配器设计模式
1.设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重复代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性
2.适配器设计模式:解决接口与接口实现类之间的矛盾问题
3.使用场景:当一个接口中抽象方法过多,但是只需要使用其中一部分的时候,就可以选择适配器设计模式
4.实现方法:编写中间类xxxAdapter,实现对应的接口中的抽象方法进行空实现,在让真正的实现类继承中间类,并重写需要用的方法