1. 程式人生 > 其它 >|NO.Z.00081|——————————|BigDataEnd|——|Java&特殊類.V09|------------------------------------------------|Java.v09|匿名內部類|使用|

|NO.Z.00081|——————————|BigDataEnd|——|Java&特殊類.V09|------------------------------------------------|Java.v09|匿名內部類|使用|



[BigDataJava:Java&特殊類.V09]                                                                                 [BigDataJava.面向物件] [|章節五|特殊類|匿名內部類的使用|]








一、匿名內部類的使用
### --- 開發經驗分享

~~~     ——>        當介面/類型別的引用作為方法的形參時,實參的傳遞方式有兩種:
~~~     ——>        自定義類實現介面/繼承類並重寫方法,然後建立該類物件作為實參傳遞;
~~~     ——>        使用上述匿名內部類的語法格式得到介面/類型別的引用即可;
### --- 匿名內部類的語法格式(重點)

~~~     ——>        介面/父類型別引用變數名= new 介面/父類型別() { 方法的重寫};
二、程式設計程式碼
package com.yanqi.task10;

public interface AnonymousInterface {
    // 自定義抽象方法
    public abstract void show();
}
三、程式設計程式碼
package com.yanqi.task10;

public class AnonymousInterfaceImpl implements AnonymousInterface {
    @Override
    public void show() {
        System.out.println("這裡是介面的實現類!");
    }
}
四、程式設計程式碼
package com.yanqi.task10;

public class AnonymousInterfaceTest {

    // 假設已有下面的方法,請問如何呼叫下面的方法?
    // AnonymousInterface ai = new AnonymousInterfaceImpl();
    // 介面型別的引用指向實現型別的物件,形成了多型
    public static void test(AnonymousInterface ai) {
        // 編譯階段呼叫父類版本,執行呼叫實現類重寫的版本
        ai.show();
    }

    public static void main(String[] args) {

        //AnonymousInterfaceTest.test(new AnonymousInterface()); // Error:介面不能例項化
        AnonymousInterfaceTest.test(new AnonymousInterfaceImpl());

        System.out.println("---------------------------------------------------------------");
        // 使用匿名內部類的語法格式來得到介面型別的引用,格式為:介面/父類型別 引用變數名 = new 介面/父類型別() { 方法的重寫 };
        AnonymousInterface ait = new AnonymousInterface() {
            @Override
            public void show() {
                System.out.println("匿名內部類就是這麼玩的,雖然你很抽象!");
            }
        };

        // 從Java8開始提出新特性lamda表示式可以簡化上述程式碼,格式為:(引數列表) -> {方法體}
        AnonymousInterface ait2 = () -> System.out.println("lamda表示式原來是如此簡單!");
        AnonymousInterfaceTest.test(ait2);
    }
}
五、編譯列印
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=54237:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task10.AnonymousInterfaceTest
這裡是介面的實現類!
---------------------------------------------------------------
lamda表示式原來是如此簡單!

Process finished with exit code 0








===============================END===============================


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart                                                                                                                                                    ——W.S.Landor



來自為知筆記(Wiz)