首先先複習一下基本:
在 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)
沒有留言:
張貼留言