
Albert
27 уровень
Помогите разобраться!!
Решен

Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Василий Самарин
10 сентября 2019, 18:58
Как правильно избавиться от "Ambiguous method call"?
0
Ярослав Java Developer Master
20 мая 2018, 00:11решение
super обладает доступом ко всем приватным полям и методам не только следующего класса-родителя, но и всех классов-родителей выше класса-родителя, НО только в пределах внешнего класса. То есть, через super можно обращаться ко всем private полям классов-родителей, которые внутри одного внешнего класса.
Сам не знал этого до конца, но только что сам затестил все, даже если класс-родитель внутри другого класса, через super все равно можно обращаться к приватным полям. Но если класс-родитель в другом файле, то такая привилегия сразу исчезает.
Объяснить это правильно не знаю как, ведь это даже нигде в Интернете никто не описывал (а я раньше искал нечто подобное), но я уверен, что это связано с какими-то вещами "под капотом". Например, нужно понимать, что для создания экземпляра производного класса, всегда будет создавать экземпляр родительского класса. Возможно этот "фантомный экземпляр" где-то висит у внешнего класса, а так, как он у внешнего класса, то у него есть полный доступ к приватным переменным вложенных классов. А если никакого экземпляра родительского класса создаваться и не будет, то все равно каждый производный класс неявно в своем конструкторе вызывает конструктор супер-класса, и это точно не просто так. Просто есть вещи, которые скрыты от глаз.
В общем, если кто сможет нормально это объяснить - объясните, однако достаточно запомнить, что если вся иерархия наследования в одном классе, то через super у них полный доступ ко всем приватным переменным их классов-родителей.
+13
Albert
20 мая 2018, 13:36
Спасибо, дружише!! Просвятил меня :)
+1