接口是一种规则,是对行为的抽象,想要哪个类拥有一个行为,让类实现对应的接口就行
当一个方法的参数时接口,可以传递接口所有的实现类对象,称为接口多态
接口的定义和使用
接口用关键字 interface来定义:public interface 接口名{}
接口不能实例化
接口和类是实现关系,关键字implements实现:public class 类名 implements 接口名{}
接口的子类(实现类)
要么重写接口所有的抽象方法,要么是抽象类
接口成员的特点
成员变量
只能是常量
默认修饰符:public static final
构造方法
无
成员方法
默认使用 public abstrcat
JDK7以前只能定义抽象方法
JDK8:能定义有方法体的方法
JDK9:接口中可以定义私有方法
类和接口之间的关系
类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多接口
接口和接口的关系
继承关系,可以单继承,也可以多继承。
细节
如果实现类实现了最下面的子接口,就需要重写所有的抽象 方法
JDK8以后接口新增方法
1.允许在接口中定义默认方法,需要用关键字default修饰
作用:解决接口升级问题
格式:public deafult 返回值类型 方法名(参数){}
注意事项:
默认方法不是抽象方法,重写时要去掉deafult关键字
public 可以省略,deafult不行
如果实现了多个接口,多接口存在同名默认方法,子类必须对该方法重写
2.允许在接口中定义静态方法,用static修饰
格式:public static返回值类型 方法名(参数){}
注意事项:
静态方法只能通过接口名调用,不能通过实现类名或者对象名调用(方法表中没有)
public 可以省略,static不行
JDK9接口新增的方法
重复的代码用一个方法提取出来,不想让外界访问,用private修饰
定义格式
privae 返回值类型 方法名(参数){}//为默认方法服务
private static 返回值类型 方法名(参数){}//为静态方法服务