天天看點

Java通過繼承外部類來建立該外部類的protected内部類的執行個體(轉)

原文連結:http://blog.sina.com.cn/s/blog_7de00ff60102xffx.html

如果想要在外部類的導出類(子類)中建立該外部類的為protected權限的内部類的執行個體,需要把該protected權限的内部類的構造器的權限設定為public.否則,編譯器将報錯。

我們可能會理所當然地認為,既然我繼承了該外部類,我就有權限去建立這個外部類的成員——protected權限的内部類的執行個體,實際上并非如此。由于我們沒有顯式地去建立該protected權限的内部類的構造器,編譯器就會在編譯的時候自動幫該protected内部類建立一個預設構造器,預設構造器的通路權限也将和該内部類的權限一緻,同為protected,也就是說隻有該内部類的導出類(子類)和與該内部類同一個包的類才有權限調用protected權限的構造器。而要建立一個類的執行個體,必須經由構造器,既然隻有該内部類的導出類(子類)和與該内部類同包的類才能調用它的構造器的話,那麼也就說明,按照預設情況(不自己建立public權限的該内部類的構造器),隻有該内部類的導出類(子類)和與該内部類同包的類才能建立它的執行個體。

綜上,如果我們想要通過繼承某外部類來建立該外部類的成員——protected權限的内部類的執行個體的話,請把該protected權限的内部類的構造器的權限設定為public。