2011-01-10 4 views
7

Это очень naiveish вопрос, но здесь идет:Цель переопределения

переопределенная метод из базового класса будет означать, что вызовы к классу суб будем называть производной, переопределен метод, правильно?

Таким образом, если нет аннотации переопределения, будет вызван метод в базовом классе. Таким образом, метод переопределения будет служить только для документирования намерения - вызовите одну версию метода над другой.

В этом случае?

Это приводит меня к следующему вопросу:

чем разница между абстрактным классом, который 5-6 классов могут вывести из но методы, унаследованные в производных классах не перекрываться, и один класс (статический или не несущественный), используемый этими 5-6 классами?

+0

'override' - это просто аннотация. Он работает так же, есть ли аннотация или нет. – Gabe

+0

Об этом подробно рассказано в http://stackoverflow.com/q/94361/697630 –

ответ

10

@Override аннотации предназначена только ловить ошибки во время компиляции. Это не влияет на поведение переопределения во время выполнения. Идея состоит в том, что вы даете компилятору возможность сообщить вам, что имя или подпись вашего метода неверны.

+6

Это особенно полезно, когда вы рассматриваете изменения кода с течением времени. Если ваш подкласс переопределяет метод базового класса, но позже кто-то изменяет эту подпись метода в базовом классе, ваш подкласс больше не отменяет ничего, что, вероятно, неверно. @Override сообщает компилятору, что метод должен что-то переопределить, поэтому он будет работать во время сборки, позволяя вам исследовать и исправлять ситуацию. Подумайте об этом как о утверждении времени сборки. –

+0

Хороший пример, действительно имеет смысл, спасибо! – dotnetdev

0

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

0

Таким образом, если нет коррекции аннотации, метод в базовом классе будет называться.

Нет. Метод переопределения в производном классе всегда будет вызываться.

Таким образом, метод коррекции будет служить исключительно для документа намерение - вызвать одну версию метода над другим.

В этом случае?

Нет. Согласно другим ответам, он сообщает компилятору, чтобы он настаивал на том, что есть что-то переопределить.

Смежные вопросы