为啥子类可以访问具有内部类的超类的私有成员?
Posted
技术标签:
【中文标题】为啥子类可以访问具有内部类的超类的私有成员?【英文标题】:Why does a subclass have access to a private member of the superclass with inner classes?为什么子类可以访问具有内部类的超类的私有成员? 【发布时间】:2019-05-12 04:13:34 【问题描述】: public class Main
static class Article
// Price in Article, private!
private float price;
Article(float price)
this.price = price;
static class Milk extends Article
Milk(float price)
super(price);
//Has access to private price
System.out.println(super.price);
public static void main(String[] args)
new Main.Milk(1.5f);
在本例中,子类可以通过 super.price 访问私有成员 access specifiers in inner classes是什么意思?
【问题讨论】:
"内部类中的访问说明符是什么意思?"他们仍然控制其他代码的访问。无需将其隐藏在同一封闭类中的代码中。将代码分组到嵌套类的主要动机之一是允许它们紧密耦合(而不会将这些东西泄漏到包范围内)。 【参考方案1】:来自JLS 6.6.1:
否则,成员或构造函数被声明为
private
,并且当且仅当它出现在包含成员或构造函数声明的***类型(第 7.6 节)的主体内时才允许访问。
因此,嵌套类可以访问其***类的私有成员,反之亦然。出于所有实际目的,私有成员可以在当前.java
文件中完全访问。
【讨论】:
A nested class can thus access private members of its top-level class and vice versa
- 不过,这不是 OP 代码中发生的情况。私有成员属于一个嵌套类,可以从另一个嵌套类访问。也就是说,这个 JLS 引用仍然适用。以上是关于为啥子类可以访问具有内部类的超类的私有成员?的主要内容,如果未能解决你的问题,请参考以下文章