【问题标题】: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是什么意思?

【问题讨论】:

  • "内部类中的访问说明符是什么意思?"他们仍然控制其他代码的访问。无需将其隐藏在同一封闭类中的代码中。将代码分组到嵌套类的主要动机之一是允许它们紧密耦合(而不会将这些东西泄漏到包范围内)。

标签: java inheritance inner-classes access-modifiers


【解决方案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 引用仍然适用。
猜你喜欢
  • 2014-05-30
  • 2013-01-09
  • 2021-06-29
  • 2020-08-02
  • 1970-01-01
  • 2020-01-19
  • 2021-06-21
  • 2011-02-06
  • 2012-07-23
相关资源
最近更新 更多