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
关键字的意义所在。