1. 接口
- 接口就是一种规则
- 当多个类都需要定义相同规则时,才用接口,某个类的特殊需求不用定义接口
2. 接口与抽象类的异同
- 接口是一种规则,是对行为的抽象
- 抽象类,是对一类事物的抽象,一般用于父类
- 在抽取共性方法的时候,由于方法体不统一,就定义了抽象方法,而抽象方法所在的类就是抽象类
- 只有全部子类都有某个共性方法时,才可以在抽象父类中写对应的抽象方法。有些子类有,有些没有时,则可以用接口。
3. 接口的定义和使用
- 接口用关键字interface来定义,大括号里写规则,即抽象方法
public interface 接口名 {
抽象方法
} - 接口不能实例化,即不能创建接口对象
- 接口和类之间是实现关系(实现类),通过implements关键字表示
public class 类名 implements 接口名 { } - 接口的子类(实现类)
a. 要么重写接口中的所有抽象方法(若实现了多个接口,则要重写所有接口中的所有抽象方法,若多个接口中有重名的方法,则重写一次就可,即重写一次就能重写全部重名的方法)
b. 要么是抽象类
注意:
- 接口和类的实现关系,可以单实现,也可以多实现
public class 类名 implements 接口名1,接口名2 { } - 实现类还可以继承一个类的同时实现多个接口
public class 类名 extends 父类 implements 接口1,接口2 { }
4. 接口中成员的特点
- 成员变量
a. 只能是常量
b. 默认修饰符:public static final(默认即,不写,虚拟机也会自动加上) - 构造方法
没有构造方法 - 成员方法
a. 只能是抽象方法
b. 默认修饰符:public abstract
JDK7以前:接口中只能定义抽象方法
JDK8的新特性:接口中可以定义有方法体的方法
JDK9的新特性:接口中可以定义私有方法
5. 接口的各种关系
- 类和类的关系:
继承关系,只能单继承,不能多继承,但是可以多层继承 - 类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口(若实现了多个接口,则要重写所有接口中的所有抽象方法,若多个接口中有重名的方法,则重写一次就可,即重写一次就能重写全部重名的方法) - 接口和接口的关系
继承关系,可以单继承,也可以多继承,还可以多层继承(若实现类实现了子接口,则要重写所有接口(包括父类)的所有方法)