interface的JDK8新特性
JDK8,除了定义全局常量和抽象方法,还可以定义静态方法,默认方法。
1、如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。--类优先原则
2、如果实现类实现了多个接口,而多个接口中定义了同名同参数的默认方法。那么在实现类没有重写的情况下,报错。--接口冲突,需要必须在实现类中重写写此方法。
3、如何在子类(实现类)中调用父类或接口中被重写的方法。
interface CompareA { //静态方法 public static void method1(){ System.out.println("compare1-beijing"); } //默认方法 public default void method2() { System.out.println("compare2-shanghai"); } public default void method3() { System.out.println("compare3-shanghai"); } } interface CompareB { public default void method3() { System.out.println("compareB3-shanghai"); } } class SuperClass { public void method3() { System.out.println("Superclass-shanghai"); } }
class Subclass extends SuperClass implements CompareA,CompareB{
public void method2() {//实现类可以重写接口中的默认方法
System.out.println("Subclass-shanghai");
}
public void method3() {//实现类可以重写接口中的默认方法
System.out.println("Subclass3-shanghai");
}
public void myMethod() {
method3();//调用自己定义的重写的方法
super.method3();//调用父类中声明的
CompareA.super.method3();
CompareB.super.method3();//调用接口中的默认方法
}
}
public class SubclassTest {
public static void main(String[] args) {
Subclass s = new Subclass();
s.method2();
//通过实现类的对象,可以调用接口中的默认方法
// Subclass.method1();
// s.method1();接口中定义的静态方法只能通过接口调用
CompareA.method1();
s.method3();
} }