Вызовите метод подкласса из метода суперкласса? - PullRequest
3 голосов
/ 10 августа 2011

Мое приложение имеет структуру, подобную этой:

class Father{
a(){ ... }

b(){a();}
}

class Son extends Father{
a(){ ..... }} //override

b () не переопределяется.Когда я создаю экземпляр Son и вызываю b (), вызывается a () Отца, но мне бы хотелось, чтобы он выполнял один из Сынов (если объект является Сыном).Является ли это возможным?

Ответы [ 4 ]

5 голосов
/ 10 августа 2011

Нет / Да

  • Нет: «Когда я создаю экземпляр Son и вызываю b (), a () отца вызывается:« Это неправильно!
  • Да: «но я бы хотел, чтобы он казнил Сына (если объектом является Сын). Возможно ли это?»- Это поведение Java

Если a не является статическим методом, тогда Java использует динамическое связывание , поэтому вызывается метод a() сына.

new Son().b() вызовет метод a() в Son.Это называется динамическим связыванием.

4 голосов
/ 10 августа 2011

Сын a метод должен быть вызван. Если это не так, то вы либо не работаете с экземпляром Son, либо неправильно переопределили метод. Это может произойти, если подписи не совпадают. Я бы дважды проверил в вашей реализации, что подписи точно такие же. Кроме того, попробуйте выбросить @Override выше Son реализации a и посмотреть, если вы получите ошибку компиляции. Если вы это сделаете, значит, вы неправильно переопределяете метод.

Как это

class Son extends Father{
  @Override
  a(){ ...}
}

Кроме того, a должен быть либо защищенным, либо общедоступным (пакет private по умолчанию будет работать только в том случае, если Father и Son находятся в одном пакете). то есть Son должен уметь "видеть" метод a().

0 голосов
/ 10 августа 2011

Переопределенные методы разрешаются во время выполнения, тогда как перегруженные методы разрешаются во время компиляции.Следовательно, достаточно просто вызвать нового Son (). A ().

0 голосов
/ 10 августа 2011

То, что вы имеете, должно быть правильным.Вызовы методов привязаны лениво.Это означает, что при вызове метода a() в любом месте объекта Son будет вызываться метод Son.

...