Tsudzukeru
@Tsudzukeru

Когда нужно вызывать super в переопределенном методе?

При переопределении какого либо метода в классе наследнике IDEA автоматом прописывает вызов родительского метода.

override fun method() {
        super.method()
    }


Например в callback методах системы Android эти вызовы должны присутствовать. Почему не знаю. Но во всех примерах они присутствуют.
Но вот если создать поток с помощью Thread или Runnable и переопределить run(), то внутри него можно убрать super.run() и это ничего не изменит. Как понять когда этот вызов нужен, а когда нет?
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
@acwartz
angular, hello world java, chrome ext/, delphi
Очень зависит от класса-предка, и всей объектной модели языка программирования. Вдруг все классы где-то регистрируются и вызов super - просто данность?

Если он делает в конструкторе работу которую нужно сделать чтобы Вы могли работать с ним, то вызов нужен.
Например класс-предок инициализирует какие-то сокеты или ещё что, а вы решили просто своё свойство дописать,
без super класс работать не будет как надо.
При том вы сами решаете когда это делать, хоть не делать, хоть в начале, хоть в конце, хоть по условию.

Например в callback методах системы Android эти вызовы должны присутствовать. Почему не знаю.

Потому что система видит что вами определен свой код, и делегирует ему вызов системного кода. Если вы замещаете системный код (скрытый в super'ах) - не делаете вызов super (что вообще редко, ибо он завернут в исключительную конструкцию чтоб не сломать UI и дать работать хотяб системному коду, в случае ошибок в вашей программе), если не замещаете а дополняете, делаете.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы