天天看點

(十二)java嵌套類和内部類

     嵌套類和内部類:在一個類裡邊定義的類叫做嵌套類,其中沒有static修飾的嵌套類是我們通常說的内部類,而被static修飾的嵌套類不常用。有的地方沒有嵌套類和内部類的區分,直接是嵌套類就稱作内部類,沒有嵌套類的說法。而通常我所聽說的基本上都是直接說的内部類,可能這種說法更為常見一些。

    内部類的範圍由裝入它的類的範圍限制,内部類可以通路外部類的成員,包括private修飾的,因為它被當成了外部類的成員,一個類的成員之間是可以互相通路的,但是反過來外部類不能通路内部類的實作細節。

    内部類可以被定義在外部類的任何地方,自然也就包括外部類的方法中,在外部類的方法中定義的内部類稱為局部内部類,反之為成員内部類,隻不過通常局部内部類用的不多。

    成員内部類是類的成員,類似類的方法、屬性和構造器等,而局部内部類和匿名内部類不屬于類的成員。

    通常情況,當某個類我們隻需要使用一次時,可能會用到匿名内部類,相對來說比較友善。

    static修飾的内部類通常叫做靜态内部類,有時也叫做類内部類,它是類相關而不是對象相關,是以隻能通路外部類的類成員,即也是static修飾的成員。這裡要注意的是,即使是靜态内部類裡邊的執行個體方法也不能通路外部類的非類成員。

    靜态内部類可以包含靜态成員也可以包含非靜态成員。

    外部類依然不能直接通路靜态内部類的成員,但是可以通過靜态内部類的類名作為調用者來通路靜态内部類的類成員,也可以通過靜态内部類的對象來通路非類成員(執行個體成員)。

    java還允許在接口中定義内部類,但是這裡的内部類隻能是靜态内部類,預設public static來修飾。

    内部類在外部類以外的地方也可以使用。

    匿名内部類不能定義成抽象類,匿名内部類不能定義構造器。