[英]How to access Outer class Instance?
我有 static 嵌套 class 如下
public class AbstractClass {
String AbstractClass = "AbstractClass";
AbstractClass(){
System.out.println("default constructor");
}
AbstractClass(String inp){
this.AbstractClass = inp;
System.out.println(this.AbstractClass);
}
}
-----
public class MyClass {
String MyClassVrbl = "MyClass";
public static class Builder extends AbstractClass {
String staticclassVrbl = "staticclassVrbl";
Builder() {
}
Builder(String inp) {
super(inp);
System.out.println("custom construtor");
}
}
public static void main(String[] args) {
MyClass.Builder mc = new MyClass.Builder("calling custom");
System.out.println(mc.how can access outer class instance variable..?);
}
}
一旦創建了嵌套類(生成器)實例,父類( MyClass
)也必須實例化..對嗎? 如何從mc
訪問外部 class 實例以訪問MyClassVrbl
?
如果MyClass
即使在創建嵌套的Builder
class 之后也沒有實例化,這不是很奇怪嗎?
一旦創建了嵌套類(Builder)實例,父類(MyClass)也必須實例化......對嗎?
情況並非如此,因為嵌套的 class 是 static。 如果它是一個內部的非靜態 class,那么就會有一個與之關聯的外部 class 的實例。 所以答案是你不能得到外部實例,因為它不存在。
Static 嵌套 class:
public class MyClass {
public static class Builder {
Builder() {
MyClass outerInstance = MyClass.this; // does not compile
}
}
}
非靜態嵌套 class (又名內部類):
public class MyClass {
public class Builder {
Builder() {
MyClass outerInstance = MyClass.this; // ok
}
}
}
此外,在使用構建器模式時,您可能希望使用build()
方法訪問創建的實例。
您不能使用mc
訪問myClassVrbl
,因為mc
是Builder
的 object ,它是AbstractClass
的子類。 您可以訪問AbstractClass
的成員,但不能訪問MyClass
的成員。 實例化一個Builder
class object 調用它的超級 class 構造函數,而不是它嵌套的構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.