gpt4 book ai didi

java - 在子类中使用 super 关键字访问父类(super class)私有(private)字段

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:42 25 4
gpt4 key购买 nike

对于编码项目,我有一个包含嵌套类的类。嵌套类是同一个外部类的子类。目的是让外部类包含嵌套类的一些实例,它可以将这些实例传递给外部类的其他实例。

嵌套子类允许外部类修改内容,而其父类(super class)允许读取内容和调用一些方法。父类(super class)对象因此被传递给其他对象,以链接链中的外部类对象。

我的问题与访问修饰符有关。这是一个极简代码示例:

abstract class OuterClass {


protected class NestedSuperClass<T> {
private T data;

public NestedSuperClass (T t) {
this.data = t;
}

public T getOutput() {
return data;
}
}

protected class NestedSubClass<T> extends NestedSuperClass<T> {
public NestedSubClass (T t) {
super(t);
}

protected void setOutput(T t) {
super.data = t;
}
}
}

在查找一些文档时,我对访问父类(super class)的私有(private)字段的能力感到困惑,但在任何地方都没有提到。有没有资源解释为什么允许子类以这种方式修改父类(super class)的私有(private)字段?

我对这项工作完全满意。我还注意到它似乎适用于标记为 protected 而不是私有(private)且不使用 super 关键字的数据。我最感兴趣的是任何提及 super 关键字这种能​​力的文档。提前致谢。

最佳答案

根据Java Language Specification

Example 6.6-5. Access to private Fields, Methods, and Constructors

A private class member or constructor is accessible only within the body of the top level class (§7.6) that encloses the declaration of the member or constructor. It is not inherited by subclasses.

所以发生的事情是内部类可以直接看到一个非私有(private)字段,因为它继承了它。

然而,对于私有(private)字段,内部类必须使用 super.field 来访问它,因为它不是继承的(否则你会得到一个编译器错误“field is not可见的”)。即使它不是继承的,它仍然可以访问,因为内部类位于外部类内部,并且私有(private)字段可供顶级类主体内的任何内容访问。

关于java - 在子类中使用 super 关键字访问父类(super class)私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31478718/

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