1. 程式人生 > 其它 >interface的JDK8新特性

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();
  } }