为什么子类可以通过内部类访问超类的私有成员?

时间:2018-12-11 07:53:06

标签: java inheritance inner-classes access-modifiers

    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 个答案:

答案 0 :(得分:2)

来自JLS 6.6.1

  

否则,将成员或构造函数声明为private,并且仅当访问发生在包含成员或构造函数的声明的顶级类型(第7.6节)的主体内时,才允许访问。 / p>

嵌套类因此可以访问其顶级类的私有成员,反之亦然。出于所有实际目的,完全可以在当前.java文件中访问私有成员。