interface的JDK8新特性
阿新 • • 發佈:2022-03-04
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();
} }