2016-05-10 6 views
-1

У меня есть два класса, класс A и класс B, который расширяет класс A. Мы говорим, что вы не можете получить доступ к закрытым членам суперкласса. Предположим, что класс A имеет открытый метод, который возвращает частный член. Теперь, если мы создадим экземпляр класса B и назовем этот метод, мы действительно увидим, что он может получить доступ к частному члену. Почему это происходит?Доступ к закрытым членам суперкласса

+0

заставляют геттеры/сеттеры для этого, они заставляют вас передавать личные переменные любого класса –

ответ

4

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

0

Добавив метод getter к классу A, вы изменили контракт, выставленный A, чтобы разрешить всем другим классам доступ только для чтения к этому члену. Наличие только геттера не позволяет никому другому (включая подкласс) до изменить приватный член, только прочитайте его.

Нет особой причины, по которой подкласс должен быть ограничен таким образом, чтобы другие классы не были.

1

Класс A имеет доступ к частной переменной, а класс B имеет доступ к методу getX. Когда вы вызываете A.getX(), класс A переходит на значение x. Думайте об этом как прокси. У вас нет доступа к этому объекту, но вы можете перенаправить свой запрос через что-то, что делает.

0

Модификаторы, защищенные частным публичным и по умолчанию, определяют, в какой области доступ к компоненту, getX() определен в области класса A, для которой x определен частный, поэтому он может обращаться к x.