Доступ к членам и наследование


Хотя подкласс включает в себя все члены своего суперкласса, он не может получать доступ к тем членам суперкласса, которые объявлены как private. Например, рассмотрим следующую простую иерархию классов:

/* В иерархии классов приватные члены остаются приватными для своего класса.
Эта программа содержит ошибку, и ее компиляция будет невозможна.
*/
// Создание суперкласса.
class А {
int i; // общедоступная по умолчанию
private int j; // приватная для А
void setij(int х, int у) {
i = х;
j = у;
}
}
// Переменная j класса А в этом классе недоступна.
class В extends А {
int total;
void sum () {
total = i + j; // ОШИБКА, j в этом классе недоступна
}
}
class Access {
public static void main (String argsU) {
В subOb = new В () ;
subOb.setij (10, 12);
subOb.sum();
System.out.println("Сумма равна " + subOb.total);
}
}

Компиляция этой программы будет невозможна, поскольку ссылка на переменную j внутри метода sum () класса В приводит к нарушению правил доступа. Поскольку переменная j объявлена как private, она доступна только другим членам ее собственного класса. Подкласс не имеет к ней доступа.

Помните! Член класса, который объявлен как приватный, останется приватным для своего класса. Он недоступен любому коду за пределами его класса, в том числе подклассам.