Зачем при переопределении метода вставляется вызов того же метода из суперкласса

Рейтинг: 0Ответов: 2Опубликовано: 02.03.2015

Почему в Intellij IDEA при переопределении метода через клавиши Ctrl+O в подклассе автоматом вставляется вызов того же метода из суперкласса:

public class Foo() {
   public void foo(){}
}
public class SubFoo extends Foo(){
   public void foo(){  //создан через Ctrl+I                                          
      super.foo(); // сгенерировало автоматически 
   }  
}

Какие выгоды от такого решения?

Ответы

▲ 4Принят

Смотрите.

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

Однако, часто виртуальные методы и используются как простое средство для повторного использования кода. Это тот случай, когда вы хотите делать то же, что делает ваш родительский класс, и лишь немножко «подправить» это. Такой паттерн стал настолько популярен, что даже IDE «помогают» вам в его имплементации. Если вы допишете код к сгенерированному методу, и не удалите вызов super.foo(), то вы как раз получите этот эффект: ваш метод foo делает то же, что и отцовский, плюс ещё немного.

▲ 1

Никаких выгод. Никаких плюсов. Никаких минусов. Нужно это или нет - определяешь только ты (также неплохо язык подучить, ага) Так делает шаблон который вшит в эту IDE. Измени его если хочешь.

вообще, некоторые методы требуют вызова super метода, например onCreate() в Андроиде. Но это нюансы