接口:更纯粹的抽象类
1.接口使用interface声明。
2.接口不能直接实例化(创建)对象。
3.接口中的成员变量默认是常量,定义时就要初始化,用public static final修饰的。
4.接口中的方法都是抽象方法。
5.接口和方法都不能用final修饰。
实现:
使用implements关键字来实现某接口。
一个类如果实现了某个接口,则必须实现该接口中的所有的抽象方法。除非该类是抽象类。
接口之间可以相互继承。接口可以多继承,因为接口中的方法没有方法体。
一个类可以实现多个接口,用逗号隔开。接口中的常量会出现菱形继承的问题,所以常量使用类名/接口名直接调用。
一个类实现了多个接口,而每个接口中都有相同名字的常量,这个时候用对象调用常量会出现歧义。
1.8新特性:
接口中可以有默认的非抽象方法。
a)default void method(){}
b)接口中的默认方法可以直接被实现类继承
c)接口中可以有多个默认方法。
d)接口中的默认方法可以被子类接口继承。
e)当一个类实现多个接口,而多个接口声明了相同的默认方法时,实现类必须重写其中一个接口的默认方法。
f)在子类接口重写的方法中,要调用父接口中被覆盖的方法时,需要使用父接口名.super.方法名();
//A,H接口中觉有 m 默认方法,B必须重写 m
public interface B extends A,H{
default void m{
System.out.println("interface b default method");
A.super.m();
H.super.m();
}
}