Нужно ли вызывать «super.XXX» всякий раз, когда я переопределяю метод? - PullRequest
3 голосов
/ 22 февраля 2011

Скажем, если я не вызову super.onPause в методе переопределения из суперкласса Activity, я получу ошибку при вызове onPause(). Но ошибки не отображаются, когда у меня нет вызовов super.XXX в методах (onCreate, onStartCommand, ...) класса, производного от Service.

Итак, при каких условиях я должен вызывать super.XXX в методе переопределения?

Ответы [ 4 ]

7 голосов
/ 22 февраля 2011

Документация сообщает вам , что вам нужно вызвать onPause, если вы получаете класс Activity:

Производные классы должны вызывать суперРеализация класса этого метода.В противном случае будет выдано исключение.

Документы Service не требуют этого в документации onStartCommand .

В целом (не специально для Android), когда вы производите, вы должны обращаться к методам суперкласса, если вы не знаете, что не должны.Это решение должно приниматься в каждом конкретном случае, но по умолчанию (я бы сказал) это было бы так.

0 голосов
/ 22 февраля 2011

Код клиента может знать только подкласс Activity (назовите его MyActivity), код клиента не может знать Activity.Однако MyActivity может знать свой базовый класс Activity.

Если переопределенный метод onPause() совпадает с его базовым классом, вам не нужно явно его переопределять.

0 голосов
/ 22 февраля 2011

Вы должны вызывать их, если в руководстве сказано так, как сказано в @ tj-crowder.

там написано

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

Если нет, то причина в том, что если вы вызываете функцию, хотите ли вы, чтобы "нормальное" поведение запускалось?

Например, если вы переопределите onKeyDown(), вы можете сделать что-то после нажатия определенной клавиши (например, «назад»).Тогда у вас есть выбор:

  • Если вы хотите, чтобы обычное действие «назад» было выполнено, вызовите супер
  • Если вы НЕ хотите запускать обычное действие,не называй это.
0 голосов
/ 22 февраля 2011

Итак, при каких условиях я должен вызывать super.XXX в методе переопределения?

Невозможно дать полезный ответ на этот вопрос.Это полностью зависит от предназначения и поведения метода переопределения и переопределяемого метода.

Если вы не знаете, вам нужно выполнить одно или несколько из следующих действий:

  • прочитайте javadocs для метода,
  • посмотрите на примеры классов, которые реализуют метод, и / или
  • посмотрите на код метода, который вы переопределяете.

В данном конкретном случае javadoc дает четкий ответ.

...