java8 接口的default方法和靜態方法


  以前,接口里的方法要求全部是抽象方法,java8以后允許在接口里定義默認方法和類方法。不同的是:默認方法可以通過實現接口的類實例化的對象來調用,而類方法就相對於工具方法了。需要注意的是,此處的靜態方法只能被public修飾(或者省略不寫),不能是private或者protected。

  好處:在Java 8 之前,接口不能有靜態方法,因此按照慣例,接口Type 的靜態工廠方法被放一個名為ypes 的不可實例化的伴生類中。例如Java Collections Framework的集合接口有45 個工具實現,分別提供了不可修改的集合、同步集合,等等。幾乎所有這些實現都通過靜態工廠方法在-個不可實例化的類( java . ut il. Collections ) 中導出。所有返回對象的類都是非公有的。現在的Collections Framework API 比導出45 個獨立公有類的那種實現方式要小得多,每種便利實現都對應一個類。這不僅僅是指API 數量上的減少,也是概念意義上的減少:為了使用這個API,用戶必須掌握的概念在數量和難度上都減少了。

interface DemoInterface {
    default void doSomething() {
        System.out.println("默認方法-->test1");
    }

    static void test() {
        System.out.println("這個是一個靜態方法");
    }
}


interface Demo1Interface {
    default void doSomething() {
        System.out.println("默認方法-->test2");
    }
}



public class Test implements DemoInterface {
    public static void main(String[] args) {
        Test test = new Test();
        test.doSomething();
        DemoInterface.test();

        //NutritionFacts tFacts = new NutritionFacts.Builder(1, 2).calotes(2).build();
    }
}

  

/**
 * 
 * 此類描述的是:實現兩個接口時,並且兩個接口的方法相同時,必須要實現
 * 
 * @author: Aarony
 * @version: 2019年5月24日 上午10:03:45
 */
public class Test1 implements DemoInterface, Demo1Interface {

    public static void main(String[] args) {
        Test1 test = new Test1();
        test.doSomething();
    }

    // 假如下面是Demo1Interface,輸出test2,DemoInterface 輸出test1
    @Override
    public void doSomething() {
        DemoInterface.super.doSomething();
        // Demo1Interface.super.doSomething();
    }
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM