Вопрос простой. Допустим есть класс-родитель А и есть класс-дочерний В (B extends A).
Допустим в классе А есть поля и методы с модификатором private. Наследуются ли эти поля и методы дочерним классом В?
Везде пишут что не наследуются, но это странно, ведь геттеры и сеттеры (которые public в классе А) унаследованы классом В и по сути работают с этими private-полями, а значит они (эти private-поля из А) как бы присутствуют в В (раз видны для геттеров и сеттеров).
Сергей Жирков
41 уровень
Про наследование и модификатор private
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Wladyslaw Java Developer Master
27 ноября 2019, 22:23
Класс B не наследует приватные поля класса А, но он содержит в себе приватные поля суперкласса. Потому как при создании объекта цепочка вызовов конструктора следует вплоть до Object. То бишь класс B, как-бы внутри имеет объект класса A. Более того, если в суперклассе нет конструктора по умолчанию - компилятор даже заставит тебя такие поля инициализировать
Почитать
+1
Сергей Жирков Backend Developer в MvideoMobile
28 ноября 2019, 00:21
Хм, а правильно ли я понимаю: приватные поля дочерний класс именно содержит, но поля эти относятся к родительскому классу, а что тогда с полями public в родительском классе? дочерний класс их как бы "копирует" и они уже не те что в родительском классе а свои собственные дочерние поля, или же они как и приватные поля и дочерний класс их только содержит и они относятся также у родительскому пока мы их не переопределим?
0
Wladyslaw Java Developer Master
28 ноября 2019, 00:26
Вот как это все хранится в памяти - тут не отвечу. Более того, это зависит от реализации виртуальной машины, мне кажется в спецификации такого нет.
Тут с точки зрения наследования скорее философский вопрос, кто что содержит либо наследует, который завязан на доступности с точки зрения публичного апи.
Раз паблики нам в наследнике видно непосредственно - значит они именно члены класса - наследника, как-то так.
+1
Ksenia Volkova Java Developer в DXC Master
27 ноября 2019, 22:19
По-моему, ты путаешь наследование с доступностью.
Геттеры и сеттеры, унаследованные классом B от А, будут работать с его собственными, класса В, полями.
К полям класса А у них доступа не будет.
0
Сергей Жирков Backend Developer в MvideoMobile
28 ноября 2019, 00:01
Честно говоря немного не понял, а если в классе B вообще нет полей? Ну например
Так вот если вызвать геттер у B, то с какими полями в В он будет работать? Полей же в В нет, а геттер есть 0
Ksenia Volkova Java Developer в DXC Master
28 ноября 2019, 06:15
Из документации:
Private Members in a Superclass
A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.
+2