c++中也有java中的匿名內部類

什麼是內部類

將類寫在其他類的內部,可以寫在其他類的成員位置或局部位置,這種寫在其他類內部的類就稱爲內部類。其他類也稱爲外部類。


什麼時候使用內部類

在描述事物時,若一個事物內部還包含其他可能包含的事物,比如在描述汽車時,汽車中還包含有發動機,這時發動機就可以使用內部類來描述。

    class 汽車 { //外部類
        class 發動機 { //內部類
        }
    }


內部類的分類
內部類分爲成員內部類與局部內部類。
我們定義內部類時,就是一個正常定義類的過程,同樣包含各種修飾符、繼承與實現關係等。在內部類中可以直接訪問外部類的所有成員。

成員內部類

成員內部類,定義在外部類中的成員位置。與類中的成員變量相似,可通過外部類對象進行訪問

定義格式

    class 外部類 {
        修飾符 class 內部類 {
            //其他代碼
        }
    }


訪問方式

外部類名.內部類名     變量名 = new   外部類名().new   內部類名();
例:

定義外部類與內部類

    class Body {//外部類,身體
        private boolean life= true; //生命狀態
        public class Heart { //內部類,心臟
            public void jump() {
                System.out.println("心臟噗通噗通的跳")
                System.out.println("生命狀態" + life); //訪問外部類成員變量
            }
        }
    }


使用:

    public static void main(String[] args) {
        //創建內部類對象
        Body.Heart bh = new Body().new Heart();
        //調用內部類中的方法
        bh.jump();
    }


局部內部類

局部內部類,定義在外部類方法中的局部位置。與訪問方法中的局部變量相似,可通過調用方法進行訪問
定義格式

    class 外部類 {
        修飾符 返回值類型 方法名(參數) {
            class 內部類 {
                //其他代碼
            }
        }
    }


訪問方式

在外部類方法中,創建內部類對象,進行訪問

局部內部類代碼演示

定義類

    class Party {//外部類,聚會
        public void puffBall(){// 吹氣球方法
            class Ball {// 內部類,氣球
                public void puff(){
                    System.out.println("氣球膨脹了");
                }
            }
            //創建內部類對象,調用puff方法
            new Ball().puff();
        }
    }

訪問內部類

    public static void main(String[] args) {
        //創建外部類對象
        Party p = new Party();
        //調用外部類中的puffBall方法
        p.puffBall();
    }

 


匿名內部類概念

內部類是爲了應對更爲複雜的類間關係。查看源代碼中會涉及到,而在日常業務中很難遇到,這裏不做贅述。

最常用到的內部類就是匿名內部類,它是局部內部類的一種。

定義的匿名內部類有兩個含義:

臨時定義某一指定類型的子類

定義後即刻創建剛剛定義的這個子類的對象

定義匿名內部類的作用與格式

作用:匿名內部類是創建某個類型子類對象的快捷方式。

格式:

    new 父類或接口(){
        //進行方法重寫
    };


代碼演示

//已經存在的父類:

    public abstract class Person{
        publicabstract void eat();
    }


//定義並創建該父類的子類對象,並用多態的方式賦值給父類引用變量

    Person  p = new Person(){
        publicvoid eat() {
            System.out.println(“我吃了”);
        }
    };

//調用eat方法

p.eat();

使用匿名對象的方式,將定義子類與創建子類對象兩個步驟由一個格式一次完成。雖然是兩個步驟,但是兩個步驟是連在一起完成的。

匿名內部類如果不定義變量引用,則也是匿名對象。代碼如下:

    new Person(){
        publicvoid eat() {
            System.out.println(“我吃了”);
        }
    }.eat();
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章