如果內部類別(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
沒有留言:
張貼留言