在類別中定義的類別稱為巢狀類別(nested class)如下。
OuterClass.NestedClass
class OuterClass {
class NestedClass {
}
}
巢狀類別又分為靜態巢狀類別(static nested class)與非靜態巢狀類別(non-static nested class)。
靜態巢狀類別 OuterClass.StaticNestedClass
class OuterClass {
static class StaticNestedClass {
}
}
非靜態巢狀類別 OuterClass.NonStaticNestedClass
class OuterClass {
class NonStaticNestedClass {
}
}
非靜態巢狀類別又稱為內部類別(inner class)
內部類別(非靜態巢狀類別) OuterClass.InnerClass
class OuterClass {
class InnerClass {
}
}
所以巢狀類別是靜態巢狀類別與內部類別的通稱,換句話說只要是定義在類別中的類別通稱為巢狀類別。
建立靜態巢狀類別,內部類別(非靜態巢狀類別)物件的語法如下。
Main
public class Main {
public static void main(String[] args) {
OuterClass.StaticNestedClass staticNestedClass = new OuterClass.StaticNestedClass(); // 靜態巢狀類別
System.out.println(staticNestedClass.getClass().getName()); // OuterClass$StaticNestedClass
OuterClass.InnerClass innerClass = new OuterClass().new InnerClass(); // 內部類別(非靜態巢狀類別)
System.out.println(innerClass.getClass().getName()); // OuterClass$InnerClass
}
}
那什麼時候要用靜態巢狀類別,什麼時候要用內部類別呢?
若不需要存取外層類別的屬性或方法,使用靜態巢狀類別(static nested class);
若需要存取外層類別的屬性或方法,使用內部類別(inner class/non-static nested class)。
沒有留言:
張貼留言