Ответ 1
Предположим, что у вас есть:
public class Foo
{
public void bar(String x, String y) {}
}
public class Foo2 extends Foo
{
public void bar(String x, Object y) {}
}
Вы действительно имели в виду Foo2.bar
переопределить Foo.bar
, но из-за ошибки в подписи это не так. Если вы используете @Override
, вы можете заставить компилятор обнаружить ошибку. Он также указывает на любое чтение кода, что это переопределяет существующий метод или реализует интерфейс - советует им о текущем поведении и возможном влиянии переименования метода.
Кроме того, ваш компилятор может дать вам предупреждение, если метод переопределяет метод без указания @Override
, что означает, что вы можете определить, добавил ли кто-нибудь метод с той же подписью в суперкласс, не зная об этом, - вы может не хотеть переопределять новый метод, так как ваш существующий метод может иметь другую семантику. Хотя @Override
не предоставляет способ "un-overriding" метода, он, по крайней мере, подчеркивает потенциальную проблему.