这是我正在研究的一个更大问题的一个简短的子问题。
为什么我不能通过第8行outer class中的inner class的实例访问outer类字段?
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
为什么我不能通过第8行outer class中的inner class的实例访问outer类字段?
因为该字段是类OuterClass的字段,而不是类InnerClass的字段。因此要访问它,您需要类OuterClass的实例,而不是类InnerClass的实例。
当然,在InnerClass定义中,您可以隐式访问OuterClass的所有字段。但这只是从上下文中访问的问题。您没有指定要访问字段的对象是什么,因此语言会自动为您选择该对象。通常是this.field,但对于包含类中的字段,它实际上是outerclass.this.field。
一旦您试图指出要访问字段的对象是什么,而不是让语言隐式地为您选择该对象,那么这个对象实际上必须是包含该字段的类。
问题内容: 如何从内部类访问外部类? 我正在重写一种使它在不同线程上运行的方法。从内联线程中,我需要调用原始方法,但是当然只要调用就会变成无限递归。 具体来说,我在扩展BufferedReader: 这个地方给了我我找不到的NullPointerException。 谢谢。 问题答案: 像这样: 上面的测试在执行时显示:
问题内容: 在下面显示的代码片段中,内部类本身继承了外部类。 方法中的唯一语句(最后一个片段)将值分配给类的私有字段,然后调用该方法。 该方法会导致另一个字符串- 要设置的私人领域中的类调用之前的方法延长。 因此,方法中的以下两个语句: 应该显示 另一个价值 另一个价值 但是他们显示 初始值 初始值 为什么会这样? 问题答案: 方法和领域都是。因此,其他子类(包括子类)均无法访问它们。它们不是继承
为什么这段代码不起作用 在这段代码工作的时候? 在第一段代码中,当我试图通过内部类“a”的对象引用内部类“a”的实例变量“x”时,我得到一个错误,说我是在静态上下文中使用内部类。在其他方法中执行相同操作时没有错误。
问题内容: 是否可以从Java内部类中获取对它的引用? 即 问题答案: 您可以像这样访问外部类的实例:
但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗? 顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。
问题内容: 在内部类中,可以访问外部类的变量,但不能访问方法的局部变量。我了解了无法访问方法的局部变量的部分,但我想知道为什么外部类变量可以访问? 我的理解是,由于内部类与外部类绑定,因此只要父级可用,子级就可以访问其父级变量。我对么? 问题答案: 假设您的外部类在内部类的范围内(非静态)被称为,以获取该字段。 例如, 其中Outer是类的名称,并标识该字段。 您也可以直接抓取它,但是如果由于阴影