1、什么是接口
接口是一种特殊的类型,通常只包含抽象方法(也可以具备普通方法),表示一种能力,常常用于扩展类的行为
2、为什么需要接口
以门和锁为例
门这个类所具备的能力是开和关,而处于安全性的考虑,我们常常为门增添锁的能力。而锁是独立于门的一个类,我们需要一种方法把门和锁联系在一起
对于门和锁而言,门是主体,锁是附加能力,我们便把锁定义为接口
3、接口和抽象类
从关系上来看,接口的关系是 has a ,即有一种什么能力,是不同类能力的附加;抽象类则是 is a ,即是一种什么类别,是同一个类的能力增添
从作用上看,接口是为了类行为的增添,而抽象类是类行为的约束
4、接口使用
定义时,并不定义为类,而是用 interface 接口(一种特殊类)
public interface Lockable { // 常在类名后加 able 表征接口类
void lockUp();
void openLock(); // 所有方法都会默认加上public abstract,必须重写
default void reverseLock(){}; // 其他方法,选择性重写
}
使用时,用 implements 链接类和接口
public class Door implements Lockable{
public void lockUp(){
//省略方法主体的代码
}
public void openLock(){
//省略方法主体的代码
}
}
5、接口的特点
- 接口不能被实例化
- 实现类必须实现接口的所有方法(抽象和普通类都具备,关键在于重写与否)
- 实现类可以实现多个接口,接口之间用 , 分隔
- 接口中的变量都是静态常量
- 支持静态方法,加入关键字 static 即可