網頁

2020/9/15

Java inner class shadowing

如果內部類別(inner class)(即非靜態巢狀類別(non-static nested class))成員變數(member variable)名稱與外層類別(enclosing class)的成員變數名稱相同,則內部類別的成員變數會覆蓋(shadowing)外層類別相同名稱的成員變數。

例如下面是一個有內部類別InnerClass的外層類別OuterClass。內外類別都有一個相同名稱的整數成員變數x

OuterClass.InnerClass

class OuterClass {
    
    int x = 1;
    int y = 2;
    
    class InnerClass {
        
        int x = 10;
        int z = 3;
        
        void printX(int x) {
            
            System.out.println(x); // 100, printX's argument 'x' shadows InnerClass.x.
            System.out.println(this.x); // 10, InnerClass.x shadows OuterClass.x.
            System.out.println(OuterClass.this.x); // OuterClass.x.
            
            System.out.println(y); // 2, OuterClass.y, no shadowing.
            System.out.println(z); // 3, InnerClass.z, no shadowing.
        }
    }

}

main()執行如下。

Main

public class Main {

    public static void main(String[] args) {

        OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();
        innerClass.printX(100);
    }
    
}

印出結果。

100
10
1
2
3


沒有留言:

張貼留言