为什么要用接口
计算机中的数据可以通过USB传输到外部存储器中,USB具有数据传输功能,存储器具有数据存储功能,将USB和存储器分别定义为抽象类,U盘可以同时继承USB和存储器么?
抽象类表示的是一种继承关系,一个类只能使用一次继承关系,这样限制了类的多重体现 。如何解决这个问题呢?使用接口。
接口的特点:
Java是单继承的语言,利用接口可以模拟多继承;
接口是对抽象类的进一步抽象,是方法声明和常量的定义集合;
接口是一种行为规范,是一种“契约”;
接口不可以被实例化
实现类必须实现接口的所有方法
实现类可以实现多个接口
接口中的变量都是静态常量
为什么接口可以多继承,而类不可以?
如果有两个父类,两个父类里有一个相同的方法,那么作为子类应该怎么继承这个方法?父类1的还是父类2的?但是实现多个接口则没问题,因为不管哪个接口,调用的都是同一个实现,因为只有方法名!而且单继承的目的之一,就是降低复杂度,减少维护难度。
接口的使用
接口的定义格式如下:
<访问符> interface 接口名 {
[访问符] <返回类型> 方法名([参数列表]);
…
}
定义一个接口MultiInterface.java,代码如下:
public interface MultiInterface {
public static final double PI = 3.1415926;
public void callArea();
default void before(){ //仅限于JDK1.8以后可使用
System.out.println(“现在开始计算:”);
}
}
注意:在定义接口的时候,接口中的所有方法和常量自动定义为public。 接口中定义的变量默认是public static final 型,且必须赋初值。
从JDK1.8开始可以使用default关键字来定义一个默认的方法来扩展接口,default关键字修饰的默认方法可以直接调用,不用子类去实现。