Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何访问外部类实例?_Java - Fatal编程技术网

Java 如何访问外部类实例?

Java 如何访问外部类实例?,java,Java,我有如下静态嵌套类 public class AbstractClass { String AbstractClass = "AbstractClass"; AbstractClass(){ System.out.println("default constructor"); } AbstractClass(String inp){

我有如下静态嵌套类

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
访问外部类实例以访问
MyClassVrbl

如果在创建嵌套的
Builder
类之后仍然没有实例化
MyClass
,这难道不奇怪吗

一旦创建了嵌套类(生成器)实例,父类(MyClass)也必须实例化。对吗

事实并非如此,因为嵌套类是静态的。如果它是一个内部非静态类,那么将有一个与之关联的外部类的实例。因此,答案是无法获取外部实例,因为它不存在

静态嵌套类:

public class MyClass {

   public static class Builder {

       Builder() {
           MyClass outerInstance = MyClass.this; // does not compile
       }

   }
}
public class MyClass {


   public class Builder {

       Builder() {
           MyClass outerInstance = MyClass.this; // ok
       }

   }
}
非静态嵌套类(又称内部类):

public class MyClass {

   public static class Builder {

       Builder() {
           MyClass outerInstance = MyClass.this; // does not compile
       }

   }
}
public class MyClass {


   public class Builder {

       Builder() {
           MyClass outerInstance = MyClass.this; // ok
       }

   }
}

此外,在使用时,您可能希望使用
build()
方法访问创建的实例。

您不能使用
mc
访问
myClassVrbl
,因为
mc
Builder
的对象,后者是
AbstractClass
的子类。您可以访问
AbstractClass
的成员,但不能访问
MyClass
的成员。实例化一个
Builder
类对象会调用它的超类构造函数,而不是嵌套它的超类构造函数。

这不是有什么问题吗?因为,即使它是静态的,它也是外部类的一部分。所以外部必须自动存在,当静态嵌套实例化时。。。不有什么不对吗?@Tim这是外部类的一部分,但不是外部类实例。这就是
static
关键字的意义所在。