java中的接口
目录特征
-
接口使用interface关键字
-
接口中的所有方法默认都是public abstract修饰
-
接口中所有的成员变量都是public static final修饰
-
接口没有构造方法,构造方法用于创建对象(接口没办法new对象),但是接口使用多态
-
实现接口的类必须要实现接口中的所有方法,如果不想实现接口中的所有方法,那么可以把该类设置为抽象类
-
接口和接口之间可以继承,并且支持多继承,类和接口是实现关系,并且一个类可以实现多个接口
-
与继承类似的,接口和实现类之间存在多态性
接口回调
先有接口的使用者,后有接口的实现者
interface USB {
public void service();
}
class Computer {
USB usb1;
USB usb2;
USB usb3;
public void run() {
System.out.println("电脑启动");
if (usb1 != null) {
usb1.service();
}
if (usb2 != null) {
usb2.service();
}
if (usb3 != null) {
usb3.service();
}
}
}
class Upan implements USB {
@Override
public void service() {
System.out.println("U盘启动");
}
}
class Test {
public static void main(String[] args) {
Computer computer = new Computer();
computer.usb1 = new Upan();
computer.run();
}
}
接口和抽象类的异同
- 接口中的方法默认是抽象方法,在接口中不能有实现(java 8开始允许接口方法有默认实现,使用default关键字),抽象类可以有非抽象方法
- 接口中的变量默认是final修饰,抽象类则不一定
- 一个类可以实现多个接口,但是最多只能继承一个抽象类
- 一个类实现接口的话,需要实现接口中的所有方法,但是继承抽象类只需要实现抽象方法
- 从设计层面,抽象类是对象的抽象,是一种模板的设计,而接口是行为的一种抽象,是一种行为的规范。
总结
- 关键字使用interface,方法都是抽象方法
- 接口可以很方便的使用多态
- 接口的性质与只有抽象方法的抽象类相似