Почему у подкласса есть доступ к закрытому члену суперкласса с внутренними классами? - PullRequest
0 голосов
/ 11 декабря 2018
    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. Что означает спецификаторы доступа во внутренних классах ?

1 Ответ

0 голосов
/ 11 декабря 2018

С JLS 6.6.1 :

В противном случае элемент или конструктор объявляется private, и доступ разрешается, если и только если он происходит в телетип верхнего уровня (§7.6), который включает в себя объявление члена или конструктора.

Таким образом, вложенный класс может получить доступ к закрытым членам своего класса верхнего уровня и наоборот.Для всех практических целей частные члены доступны точно в текущем файле .java.

...