匿名內部類、匿名對象


/*
如果接口的實現類(或者是父類的子類),只需要使用唯一的一次
那么這種情況下就可以省略掉該類的定義,而改為使用【匿名內部類】

匿名內部類的定義格式:
接口名稱 對象名 = new 接口名稱(){
//覆蓋重寫所有抽象方法
};


對格式“new 接口名稱(){...}”進行解析
1.new代表創建對象的動作
2.接口名稱就是匿名內部類需要實現哪個接口
3.{...}才是匿名內部類的內容

另外還要注意幾個問題
1.匿名內部類,在創建對象的時候,只能創建唯一一個
如果希望多次創建對象,而且類的內容一樣化,就必須使用單獨定義的實現類了。(或者多次創建)
2.匿名對象,在【調用方法的時候】只能調用唯一一次。
如果希望同一個對象調用多個方法,那么對象必須取個名字(或者多次調用)
3.匿名內部類是省略了【實現類/子類名稱】,匿名對象省略了【對象名稱】
強調:匿名內部類和匿名對象名稱不是一回事
public class DemoMain {
    public static void main(String[] args) {
//        MyInterface obj = new MyInterfaceImpl();
//        obj.method();
//        MyInterface obj = new MyInterface();

    //使用匿名內部類,但不是匿名對象,對象名稱就叫objA
        MyInterface objA = new MyInterface(){
            public void method(){
            System.out.println("匿名內部類實現了方法__");
        }
            public void method2(){
            System.out.println("匿名內部類實現了方法222__");
        }
    };

        objA.method();
        objA.method2();
        System.out.println("==================");

        //使用了匿名內部類,而且省略了匿名對象名稱,也是匿名對象
        new MyInterface() {
            @Override
            public void method() {
                System.out.println("匿名內部類實現了方法__b");
            }
            public void method2(){
                System.out.println("匿名內部類實現了方法222__b");
            }
        }.method();
        //因為匿名對象無法調用第二次方法,需要在創建匿名內部類的匿名對象
        new MyInterface() {
            @Override
            public void method() {
                System.out.println("匿名內部類實現了方法__b");
            }
            public void method2(){
                System.out.println("匿名內部類實現了方法222__b");
            }
        }.method2();


    }
}

接口

public interface MyInterface {

    public abstract void method();//抽象方法
    public abstract void method2();
}

 

轉自B站


免責聲明!

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



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