这是我正在努力解决的一个较大问题的简短问题。
为什么我不能通过第8行外部类中的内部类实例访问外部类字段?
public class OuterClass {
private static OuterClass instanceOf(InnerClass innerClass) {
return new OuterClass(innerClass.outerField);
}
public static OuterClass instanceOf(int arg) {
return new OuterClass(arg);
}
private int outerField;
private OuterClass(int arg) {
this.outerField = arg;
}
// Outer class getters...
public InnerClass build() {
return new InnerClass(this);
}
public class InnerClass {
private InnerClass(OuterClass outerClass) {
outerField = outerClass.outerField;
}
// Inner class setters......
public OuterClass build() {
return OuterClass.instanceOf(this);
}
} // End InnerClass
} // End OuterClass
答案 0 :(得分:0)
为什么我无法通过实例访问外部类字段 第8行外层的内部类?
因为该字段是类OuterClass的字段而不是类InnerClass的字段。因此,要访问它,您需要一个类OuterClass的实例,而不是类InnerClass的实例。
当然,在InnerClass定义中,您可以隐式访问OuterClass的所有字段。但这只是从这个背景下进入的问题。您没有指定您尝试访问该字段的对象是什么,因此语言会自动为您选择。它通常是 this.field ,但对于包含类的字段,它实际上是 OuterClass.this.field 。
一旦你试图指出你试图访问某个字段的对象是什么,而不是让语言隐含地为你选择那个对象,那么这个对象实际上必须属于该类包含该字段。