網頁

2020/9/15

Java 巢狀類別與內部類別 nested class and inner class

在類別中定義的類別稱為巢狀類別(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)。


沒有留言:

張貼留言