首先先複習一下基本:
在 Java 的 Class 內宣告的 Class,稱為 Nested Class(巢狀類別)。
Nested Class 又分為 static 和 non-static 兩種,其中加上 static 宣告的就叫做 Static Nested Class;而 non-static 的 Nested Class 又稱為 Inner Class(內部類別)。
Inner Class 還可以再細分為三種又是另外一個故事了,這邊就不提
那 Class.this 究竟是代表甚麼呢...
public class ClassThisTest { public static void main(String[] args) { OuterClass outerInst1 = new OuterClass("Outer class no.1"); OuterClass.InnerClass innerInst1 = outerInst1.new InnerClass(); System.out.println(innerInst1.toString()); //Inner class System.out.println(innerInst1.outerToString()); //Outer class no.1 OuterClass outerInst2 = new OuterClass("Outer class no.2"); OuterClass.InnerClass innerInst2 = outerInst2.new InnerClass(); System.out.println(innerInst2.outerToString()); //Outer class no.2 } } class OuterClass { private String outerMsg; public OuterClass(String msg) { this.outerMsg = msg; } public String toString() { return outerMsg; } public class InnerClass { private final String innerMsg = "Inner class"; public String toString() { return innerMsg; } public String outerToString() { //Class.this return OuterClass.this.toString(); } } }簡單說就是 Inner Class 用來參照相依的 Outer Class 實體用的。
因為在 Inner Class 裡面用 this 關鍵字的話,將會指向 Inner Class 實體,所以若是需要參照 Outer Class 實體時,用 Class.this 的方式就可以了。
參考資料:
StackOverFlow - Java: Class.this
StackOverFlow - Java: Static vs non static inner class
Java Tutorial - Nested Class
Java Gossip: 內部類別(Inner class)
StackOverFlow - Java: Class.this
StackOverFlow - Java: Static vs non static inner class
Java Tutorial - Nested Class
Java Gossip: 內部類別(Inner class)
沒有留言:
張貼留言