一、接口的特性
- 接口变量必须引用实现了接口的类对象
2.可以使用instanceof检查一个对象是否实现了某个特定的接口
if(anObject instanceof Comparable){......}
3.接口不能包含实例域或静态方法,但却可以包含常量
public interface a extends b{
double milesPerGallon();
double SPEED_Limit=95; // a public static final constant
}
与接口的方法都自动地被设置为public一样,接口的域被自动地设为public static final
二、接口与抽象类
每个类只能扩展与一个类,但每个类可以实现多个接口
class Employee extends Person,Comparable
默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。
我们只需在方法名前面加个 default 关键字即可实现默认方法。
一个接口有默认方法,考虑这样的情况,一个类实现了多个接口,且这些接口有相同的默认方法,以下实例说明了这种情况的解决方法:
public interface Vehicle {
default void print(){
System.out.println("我是一辆车!");
}
}
public interface FourWheeler {
default void print(){
System.out.println("我是一辆四轮车!");
}
}
第一个解决方案是创建自己的默认方法,来覆盖重写接口的默认方法:
public class Car implements Vehicle, FourWheeler {
default void print(){
System.out.println("我是一辆四轮汽车!");
}
}
第二种解决方案可以使用 super 来调用指定接口的默认方法:
public class Car implements Vehicle, FourWheeler {
public void print(){
Vehicle.super.print();
}
}