gpt4 book ai didi

java - 从扩展外部类本身的内部类中访问外部类成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:38 26 4
gpt4 key购买 nike

在下面显示的代码片段中,一个内部类继承了一个外部类本身。

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 分配给私有(private)字段 value TestInnerClass 类,然后调用 callShowValue() 方法。

callShowValue() 方法导致另一个字符串 - Another value 被设置为 TestInnerClass 的私有(private)字段 value 类,然后调用 InnerClassshowValue() 方法扩展 TestInnerClass

相应地,showValue() 方法中的以下两个语句,

System.out.println(getValue());
System.out.println(value);

应该显示,

Another value
Another value

但他们显示,

Initial value
Initial value

为什么会这样?

最佳答案

方法 getValue() 和字段 value 都是 private。因此,任何其他类都无法访问它们,包括子类,即。它们不是遗传的。

InnerClass#showValue()

public void showValue() {
System.out.println(getValue());
System.out.println(value);
}

因为它们是私有(private)的,getValue()value 指的是外部类的成员,它们是可访问的,因为你们在同一个类中, IE。 内部类可以访问外部类的私有(private)成员。以上调用等同于

public void showValue() {
System.out.println(TestInnerClass.this.getValue());
System.out.println(TestInnerClass.this.value);
}

并且由于您已将 value 设置为

new TestInnerClass("Initial value")

您看到 "Initial value" 被打印了两次。 无法访问子类中的那些 private 成员。


重点是:不要让子类成为内部类。

关于java - 从扩展外部类本身的内部类中访问外部类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19349391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com