java_se 匿名內部類

匿名內部類
是內部類的簡化版格式
前提條件:
必須存在一個接口或者是一個類(可以是具體類,也可以是一個抽象類)中

書寫的格式:
new 接口名或者類名(){
方法重寫體;
}//相當於直接寫了一個具有重寫方法的匿名類
* 匿名內部類的實質:
繼承了該類(抽象類)或者是實現了該接口的子類對象!

以接口來說明

interface Inter{
    //抽象功能
    public abstract void show() ;
    public abstract void show2() ;
}


//外部類
class Outer6{
    //成員方法
    public void method(){
        //當接口中有一個方法的時候
//      new Inter(){
//
//          @Override
//          public void show() {
//              System.out.println("show");
//          }
//          
//      }.show() ;

        //當接口中有兩個方法的時候 下面的方法就比較繁瑣了
        /*new Inter(){

            @Override
            public void show() {
                System.out.println("show");
            }

            @Override
            public void show2() {
                System.out.println("show2");
            }

        }.show() ;

        new Inter(){

            @Override
            public void show() {
                System.out.println("show");
            }

            @Override
            public void show2() {
                System.out.println("show2");
            }

        }.show2();*/
        //////////////////////////////////////////////////

        //}這樣就可以用對象名可以調用重寫的方法

//      Inter i2 = new Inter() ;
        Inter i = new Inter(){      

            @Override
            public void show() {
                System.out.println("show");
            }

            @Override
            public void show2() {
                System.out.println("show2");
            }

        };//分號

        //使用對象名調用
        i.show();
        i.show2() ;

    }
}

//測試類
public class InnerDemo6 {
    public static void main(String[] args) {
        Outer6 o = new Outer6() ;
        o.method() ;
    }
}

說明:
1.匿名內部類是寫在局部位置的
2.外部類和內部類沒有繼承 實現關係
3.匿名內部類只是實現當前某一種功能去出現,所以不要和其他類想得那麼複雜
4.使用接口名 對象名 = new 接口名(){
//方法重寫();
}

匿名內部類 在實際開發的應用:在參數裏面充當內部類

interface Inter3{
    public abstract void study() ;
}

class StudentDemo{
    public void method(Inter3 i){//形式參數是一個接口
        i.study() ;
    }
}

//測試類
public class OuterTest {
    public static void main(String[] args) {
        //需求:調用StudentDemo中的method()方法

        StudentDemo sd2 = new StudentDemo() ;
        sd2.method(new Inter3(){

            @Override
            public void study() {
                System.out.println("好好學習,天天向上...");
            }

        }) ;

    }
}

說明:這裏參數充當了內部類,所以在調用method方法時候要重寫方法,使用匿名內部類,其實就是類似以前的調用,只不過使用內部類實現了方法罷了!

發佈了56 篇原創文章 · 獲贊 5 · 訪問量 8646
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章