java – 在子类中使用super关键字访问超类私有字段
对于编码项目,我有一个包含嵌套类的类.嵌套类在同一个外部类中进行子类化.其目的是让外部类包含嵌套类的一些实例,它可以传递给外部类的其他实例.
嵌套子类允许外部类修改内容,而超类允许读取内容并调用某些方法.因此,超类对象被交给其他对象以链接链中的外部类对象. 我关心访问修饰符的问题.这是一个简约的代码示例: 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; } } } 当查找一些文档时,我被访问超级类的私有字段的能力感到困惑,没有在任何地方被提及.有没有资源解释为什么子类被允许以这种方式修改超类的私有字段? 我完全可以这样工作.我也注意到,似乎可以使用标记为受保护而不是私有的数据,而不使用超级关键字.我最感兴趣的是提供超级关键字的这种能力的任何文档.提前致谢. 解决方法
根据
Java Language Specification
那么发生的是内部类可以直接看到非私有字段,因为它继承它. 然而,对于私有字段,内部类必须使用super.field来访问它,因为它不被继承(否则你得到编译器错误“字段是不可见的”).即使它不被继承,它仍然是可访问的,因为内部类在外部类中,并且私有字段可以由顶级类的正文内的任何内容访问. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |