Как получить доступ к аналогичным полям суперкласса в многоуровневом наследовании - PullRequest
0 голосов
/ 03 июля 2018

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

class GrandParent {
  String name;
}

class Parent extends GrandParent {
  String name;
}

class Child extends Parent {
  String name;
  //now here, how to access GrandParent name field
}

1 Ответ

0 голосов
/ 04 июля 2018

Здесь нет множественного наследования. Ваш фрагмент демонстрирует скрытие поля .

Внутри класса поле, имя которого совпадает с именем поля в суперклассе, скрывает поле суперкласса, даже если их типы различны. Внутри подкласса на поле в суперклассе нельзя ссылаться по его простому имени. Вместо этого поле должно быть доступно через super.

super позволяет видеть участников только на один уровень ниже (= члены прямого родителя). Цепи типа super.super считаются синтаксически недействительными.

Но есть как минимум два способа добиться того, чего вы хотите:

  1. (GrandParent)this).name - повышение до GrandParent
  2. GrandParent.class.getDeclaredField("name").get(this) - извлечение отражением
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...