1. 程式人生 > >java中的nested-class和inner-class

java中的nested-class和inner-class

參考了這篇文章:

http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

nested-class和inner-class的區別:

Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are simply called static nested classes. Non-static nested classes are called inner classes.

因此下例中StaticNestedClass是巢狀類,InnerClass是內部類。

class OuterClass {
    ...
    static class StaticNestedClass {
        ...
    }
    class InnerClass {
        ...
    }
}

nested-class和inner-class都是外層類的成員變數。只不過一個是靜態的,一個是非靜態的。

因此,nested-class和inner-class都可以被宣告為private,public,protested或package private (這裡回憶一下,普通的class在宣告時只能是public或package private的)。

但是有靜態和非靜態的不同可知:nested-class是和類相關的,而inner-class是和例項相關的。因此可以不例項化物件,就直接訪問nested-class,而必須例項化類才能訪問inner-class。而nested-class不能訪問外層類的其他成員變數或方法,而inner-class則可以。

這裡還有一個有意思的事:因為inner-class是非靜態成員變數,因此inner-class中不能再定義靜態變數或方法了。