java – 从扩展外部类本身的内部类中访问外部类成员
|
在下面的代码片段中,内部类继承自己的外部类. 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()方法(最后一个片段)中的唯一语句将值初始值分配给TestInnerClass类的专用字段值,然后调用callShowValue()方法. callShowValue()方法导致另一个字符串 – 在调用扩展TestInnerClass的InnerClass的showValue()方法之前,将另一个值设置为TestInnerClass类的私有字段值. 因此,showValue()方法中的以下两个语句, System.out.println(getValue()); System.out.println(value); 应该显示,
但他们显示,
为什么会这样呢? 解决方法方法getValue()和字段值都是私有的.因此,它们不可用于任何其他类,包括子类,即.它们不是继承的.在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);
}
既然你已经设定了价值 new TestInnerClass("Initial value")
您会看到“初始值”被打印两次.没有办法访问子类中的私人成员. 要点是:不要让子类内部类. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
