Java Inner Class

來源:互聯網
上載者:User

Inner Class 即嵌套類,也即C++和C#中的Nested Class。但Java 的Inner Class 與 C++和C#最大的不同之處在於,嵌套類包含一個指向其容器類的引用,可以訪問容器類的成員。以下代碼示範了這一點:

public class Container {



    String Name;



    class InnerClass



    {



        InnerClass(){};



        public void func()



        {



            System.out.println(Name);



        }



    }



public Container(String name){

       Name=name;



        InnerClass a=new InnerClass();



    }



    public static void main(String [] arg)



    {



        Container a=new Container(“ContainerA");



        InnerClass b=a.new InnerClass();   //注意此處



        InnerClass c=(new Container(“ContainerB")).new InnerClass(); //本質上等價於上一句

              a.func();

              c.func();



    }



}

注意其中獨特的new文法,在靜態函數要建立一個Inner Class,必須有一個其容器類的執行個體。如果直接建立



InnerClass b=new InnerClass();

則會導致編譯出錯。

而在Container的建構函式中,建立InnerClass時,自動將this作為InnerClass的引用。

在Inner Class 中使用容器類的成員,不需指定執行個體,自動指向建立它的容器類。

       這是一個很有用的文法特徵,編譯器替我們省了許多事。

       本例的輸出是:

       ContainerA

       ContainerB

      

       還可以看到,Inner Class 可以訪問容器類的任何成員,不管是public、private或protected的成員全是透明的。反之則不然,容器類只能訪問Inner Class的public成員。


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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