在下面显示的代码片段中,内部类本身继承了外部类。
package test;
class TestInnerClass {
private String value;
public TestInnerClass(String value) {
this.value = value;
}
private String getValue() {
return value;
}
public void callShowValue() {
new InnerClass("Another value").showValue();
}
private final class InnerClass extends TestInnerClass {
public InnerClass(String value) {
super(value);
}
public void showValue() {
System.out.println(getValue());
System.out.println(value);
}
}
}
public final class Test {
public static void main(String[] args) {
new TestInnerClass("Initial value").callShowValue();
}
}
方法中的唯一语句main()
(最后一个片段)将值分配给类Initial value
的私有字段value
,TestInnerClass
然后调用该callShowValue()
方法。
该callShowValue()
方法会导致另一个字符串- Another value
要设置的私人领域value
中的TestInnerClass
类调用之前showValue()
的方法InnerClass
延长TestInnerClass
。
因此,方法中的以下两个语句showValue()
:
System.out.println(getValue());
System.out.println(value);
应该显示
另一个价值
另一个价值
但是他们显示
初始值
初始值
为什么会这样?
方法getValue()
和领域value
都是private
。因此,其他子类(包括子类)均无法访问它们。它们不是继承的。
在 InnerClass#showValue()
public void showValue() {
System.out.println(getValue());
System.out.println(value);
}
因为它们是私有的,getValue()
并且value
是指外部类的成员,因此您可以访问,因为您属于同一类,即。
内部阶级可以访问外部阶级的私人成员 。以上通话等价于
public void showValue() {
System.out.println(TestInnerClass.this.getValue());
System.out.println(TestInnerClass.this.value);
}
既然你已经设置value
为
new TestInnerClass("Initial value")
您会看到"Initial value"
两次打印。 无法访问private
子类中的那些成员。
关键是:不要使子类成为内部类。
问题内容: 如何从内部类访问外部类? 我正在重写一种使它在不同线程上运行的方法。从内联线程中,我需要调用原始方法,但是当然只要调用就会变成无限递归。 具体来说,我在扩展BufferedReader: 这个地方给了我我找不到的NullPointerException。 谢谢。 问题答案: 像这样: 上面的测试在执行时显示:
这是我正在研究的一个更大问题的一个简短的子问题。 为什么我不能通过第8行outer class中的inner class的实例访问outer类字段? 字段在内部类中可见。 外部类中的非静态方法仍然存在此问题。 字段的可见性并不重要。无论从哪种方式,它都可以从内部类中看到。 可以通过内部类中的(私有)getter访问该字段,但我出现问题的原因之一是,我希望避免这些。 它应该成为不可变的构建器模式的一
问题内容: 是否可以从Java内部类中获取对它的引用? 即 问题答案: 您可以像这样访问外部类的实例:
但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗? 顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。
我认为内部类的成员,即使被声明为私有的,也可以从它的封闭类中访问。但是我遇到了以下代码结构的编译时错误。我的顶级类实现了Iterable接口。Iterator在内部类中实现。当内部类的一个实例通过iterator()方法获得时,我无法使用该实例访问数据栏。 有什么建议吗?
问题内容: 因此,我们大多数人都知道 如何 从内部类访问外部类。用这些词进行搜索会给出关于该主题的大量回答问题。但是我想知道的是为什么语法是这样。 例: 为什么呢?看起来是A类的静态字段,但是… 感到困惑 如果这是重复的话,请原谅我。就像我说的那样,用这些词进行搜索会给出操作答案。 问题答案: 为什么这样做呢?真的,只是因为它的方式。它行之有效,从某种意义上讲,并且不需要花哨的语法来完成这项工作。