В чем разница между использованием @override и неиспользованием его с интерфейсами?
Это мой интерфейс
public interface ConnectionListener{
public void onConnectionReady();
public void onConnectionDown();
}
Я реализую эти интерфейсы в классе HomeActivity. Я хотел бы узнать, в чем разница между использованием @Override в реализованных методах и не использованием аннотации @Override...
public class HomeActivity implements ConnectionListener
{
@Override
public void onConnectionReady() {
}
@Override
public void onConnectionDown() {
}
}
2 ответа
@Override
показывает только тот компилятор, который вы хотите переопределить методом. Если сигнатура метода неизвестна в суперклассе или реализованном интерфейсе, вы получите ошибку времени компиляции.
Во время выполнения нет никакой разницы.
Для получения дополнительной информации см. Javadoc.
Вы найдете лучшее использование тега @Override при использовании его со статическими методами во время наследования. Предположим, что у класса A есть статический метод EAT, класс B расширяет класс A и создает статический метод EAT в классе B. Теперь у классов A и B есть статический метод EAT с другой реализацией, но он не переопределяется, когда вы пытаетесь пометить его с @Override он показывает ошибку, что означает, что подкласс имеет ту же сигнатуру и разные реализации, но не переопределен.
Если у вас есть класс B, который расширяет класс A (B расширяет A), можете ли вы использовать @Override для "замены" какого-либо метода. Вы можете изменить способ работы методов в классе B, не заменяя его в классе A. В переопределенном методе вы также можете вызывать метод из класса A с помощью метода "super" и изменять способ его работы после использования super. В жизни вы можете использовать класс Animal, чтобы расширить класс Dog и Cat. Если у класса Animal есть метод getSound(), вы можете для Dog переопределить его для звука собаки и для Cat для звука кошки. Но у Собаки и Кошки будут все артефакты, которые имеют животных, таких как ноги или другие части тела.
Интерфейс, который вы можете использовать при попытке стандартизировать некоторый групповой класс, будет иметь то же имя метода, но в интерфейсе вы не реализовали код метода.
Вы можете прочитать больше об этом здесь: Внедряет и расширяет: Когда использовать? Какая разница?