@ Override
@ Переопределение было введено в Java 5 (и немного расширено в Java 6).Это только информативно.Он говорит: «Я полагаю, что нужно переопределить что-то, что уже существует в родительском классе или интерфейсе.
Как и в Eclipse, IDE может предупредить вас, если такого родительского метода нет (например, если вы неправильно введете имя).Если ваш метод не будет вызван (из-за неправильного написания).
Но не стоит слишком беспокоиться об этом.
Абстрактный класс против интерфейса
Абстрактный класс позволяет вам определять базовую функциональность, оставляя неопределенные части. Интерфейс не позволяет вам реализовывать что-либо. Вы можете программировать все, кроме части, которая действительно изменяется в каждом случае. Поэтому, когда вам это нужно, вы наследуете и реализуетепропущенная часть.
Переопределить два метода
Да. В Java вы можете переопределить все методы, не являющиеся explicity, объявленные как final в родительском классе. Это нормально. Если вы хотитесделав его неизменяемым, вы можете объявить его окончательным. Например, если вы хотите объявить заказ, вы можете:
public abstract class Ordering<X>
{
abstract boolean isLower(X a, X b);
abstract boolean isEquals(X a, X b);
final boolean isGreater(X a, X b) {
return !isLower(a, b) && !isEquals(a, b);
}
}
Конечно, это может иметь смыслпереопределить isGreater, чтобы реализовать его еще более эффективным способом (представьте, что сравнивать его дорого).Но есть сценарии, когда вы хотите предоставить базовую уже реализованную функциональность (и тогда, когда абстрактные классы лучше, чем интерфейсы) или когда вы хотите принудительно реализовать некоторую реализацию (тогда, когда ключевое слово final показывается полезным).