@Nickname192

Наследование приватных полей и методов?

Здравствуйте у меня вопрос: есть класс А, у него есть private int a; и конструктор
public class A{ //open
private int a;
public A(int a){ this.a = a;}

и метод
public int pow() { return a*a; }
} //close
.
Есть класс потомок:
public class B extends A{
public B(int a){
super(a); }

В точке входа, точнее в методе main
psvm(String []args){
A a = new A(5);
B b = new B(6);
int aPow = a.pow();
int bPow = b.pow();
sout("aPow = " + aPow + " bPow = " + bPow);
}

У класса "B" нету поля "а", и я читал что приватные поля не наследуются, как можете это объяснить?

psvm
значит public static void main
  • Вопрос задан
  • 240 просмотров
Решения вопроса 1
@vabka
Токсичный
У класса "B" нету поля "а", и я читал что приватные поля не наследуются, как можете это объяснить?

Это значит, что такое поле у B как бы есть, но из-за того что оно приватное - доступ к нему имеют только методы родителя.
Класс B в вашем случае передаёт значение в конструктор родителя, чтобы инициализировать это поле.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Erik_Mironov
@Erik_Mironov
Подкласс не наследует закрытые члены своего родительского класса. Однако, если у суперкласса есть общедоступные или защищенные методы для доступа к его частным полям, они также могут использоваться подклассом. Так же, если класс-потомок является вложенным классом по отношению к классу-родителю, то имеет доступ ко всем частным полям и методам класса-родителя. В вашем же случае вы обязаны вызвать конструктор родительского класса в классе-потомке. Это не значит что вы получили доступ к приватному полю класса-родителя
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы