接口
接口的设计理念是将不可变的东西封装到一起,将可变的东西放到实现中
接口代表规则,是行为的抽象。
如果想要哪个类拥有一个行为,就让这个类实现对应的接口就可以了
当一个方法的参数是接口时,可以传递接口所有实现类的对象,这个方式叫接口多态
接口的定义和使用
用关键字 interface 来定义
格式: public interface 接口名{}
接口不能实例化
接口和类是实现关系,通过implements关键字表示
格式:public class 类名 implements 接口名{}
接口的子类
要么重写接口中的所有抽象方法
要么是抽象类
注意事项: 接口和类实现关系,可以单实现,也可以多实现
public class 类名 implements 接口名1 ,接口名2 {}
实现类可以在继承一个类的同时实现多个接口
public class 类名 extends 父类 implements 接口名1,接口名2{}
接口中成员的特点
成员变量
只能是常量,默认修饰符是 public static final
接口的设计理念是将不可变的东西封装到一起,将可变的东西放到实现中
构造方法 接口中没有构造方法,因为接口不能创建对象,也不需要给子类成员赋值
成员方法 jdk7之前,只能是抽象方法
jdk8之后,可定义有方法体的方法(默认,静态)(default,static)
jdk9之后,可定义私有方法
原因: jdk8: 只要接口的内容变化,那么所有的实现类都要修改,
即接口升级的时候,避免所有现有实现类代码报错
jdk9: 当出现有方法体的方法的时候,接口中就会有很多重复代码
此时需要一个私有方法来抽取共性代码
jdk8之后接口的默认方法注意事项
默认方法不是抽象方法,所有不被强制重写。如果要重写,重写时候去掉default关键字就行
public 可以省略,default不能省略
如果实现了多个接口,存在同名默认方法,子类必须对该方法重写
jdk8后接口的静态方法
允许接口中定义静态方法,用static修饰
格式: public static 返回值类型 方法名(参数列表){}
注意事项:静态方法只能通过接口名调用,不能通过实现类名或对象名调用
public可以省略,static不能省略
jdk9后接口的私有方法
两种,普通私有和静态私有方法
格式: private 返回值类型 方法名(参数列表){}
private static 返回值类型 方法名(参数列表){}
接口和类之间的关系
类与类 继承关系,只能单继承,不能多继承,但可以多层继承
类与接口 实现关系,可以单实现,也可以多实现,还能继承一个类同时实现多个接口
多个接口中有同名方法怎么办?
只要重写一次就行
接口与接口 继承关系,可以单继承,也可以多继承
如果有类实现了子接口,那么要重写所有父类以及子类的方法