簡體   English   中英

如何訪問外部 class 實例?

[英]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 ,因為mcBuilder的 object ,它是AbstractClass的子類。 您可以訪問AbstractClass的成員,但不能訪問MyClass的成員。 實例化一個Builder class object 調用它的超級 class 構造函數,而不是它嵌套的構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM