java 內部類

來源:互聯網
上載者:User

標籤:

什麼時候使用:

當A類中的內容要被B類直接存取,而A類還需要建立B的對象,訪問B的內容時,將B稱之為內部類(內建類、嵌套類)。

訪問方式:

內部類可以直接存取外部類中的所有成員,包含私人的;而外部類要想訪問內部類中的成員,必須建立內部類的對象。

class Outer//外部類{         private int num = 4;         public calss Inner//內部類{         void show(){         System.out.println("num=num");                     }                                    }         void method(){                 /*Outer.*/Inner in = new /*Outer.*/Inner();                 in.show();                       }                     }class InnerClassDemo{         public static void main(String[] args){                 Outer out = new Outer():                 out.method();                                               }                    }public static void main(String[] args){         Outer out = new Outer();         out.method();         //測試情況一:直接存取Outer中的Inner內部類的非靜態成員         //建立內部類的對象就可以了,內部類作為成員,應該先有外部類對象,再有內部類對象。         Outer.Inner in = new Outer().new Inner();         in.show();         //測試情況二:對靜態內部類中的非靜態成員進行調用         //因為內部類是靜態,所以不需要建立Outer的對象,直接建立內部類對象就可以了。         Outer.Inner2 in = new Outer().new Inner2();         in.show2();                                        }
怎麼訪問的:


為什麼內部類就能直接存取外部類中的成員呢?

        因為內部類其實持有了外部類的引用,  外部類.this,對於靜態內部類不持有外部類.this  而是直接使用 外部類名

局部內部類特點:

匿名內部類,其實就是一個帶有內容的子類對象。

class InnerClassDemo4{        public static void main(String[] args){        Outer out = new Outer();        AbsDemo a = out.getObject();//多態        a.show();<span style="white-space:pre"></span>      }}

現在不想建立具體的子類型,但還想建立AbsDemo的子類對象,如何??

直接使用父類就可以了,可是在該例中是抽象類別,怎麼new對象?→重寫抽象方法。

new AbsDemo(){        //重寫抽象的show方法        void show(){                System.out.println("num="+num);<span style="white-space:pre"></span>   }}
這就是傳說中的一個AbsDemo的子類對象,只不過這是一個帶著內容的子類休想。

格式:new 父類or介面(){子類的內容}

其實尼匿名內部類就是內部類的簡化形式;注意匿名內部類有前提,必須要繼承父類或者實現介面。


注意:

如果內部類有靜態成員,該如何訪問:

既然靜態內部類已經隨外部類載入,而且靜態成員隨著類的載入而載入,就不需要對象,直接用類名調用即可。

Outer.Inner2.staticShow();


static void show1(){}//非靜態內部類中不允許定義靜態成員;僅允許在非靜態內部類中定義靜態常量(static final)

如果想要在內部類中定義靜態成員,必須內部類也要被靜態修飾。



java 內部類

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.