在此代码中:
public class Main {
public static void main (String[] args){
Animal dog = new Dog();
Animal cat = new Cat();
dog.voice();
cat.voice();
}
}
public class Animal {
protected void voice(){
System.out.println("*sound*");
}
}
class Dog extends Animal {
@Override
protected void voice() {
System.out.println("Woof!");
}
}
public class Cat extends Animal{
protected void voice(){
System.out.println("Meow!");
}
}
类中Dog
有@Override
,Cat
类中没有,但代码工作正常。那还有什么意义呢@Override
?
该文档非常简短地说:
@Override
该注释告诉编译器该元素旨在覆盖超类中声明的元素。尽管在重写方法时不需要使用此注释,但它有助于防止错误。如果标记的方法@Override
无法正确重写其超类之一中的方法,则编译器会生成错误。这应该有助于避免错误:
它还使代码更容易理解。
然而,当您在某些文本编辑器中使用 Java 编写代码时,也许所有这些优点都是需要的。
尽管如此,我仍然希望在我阅读的代码中看到这个注释。
在语言中,
Kotlin
这不再是一个注释,而是一个关键字override
,如果重新定义函数,这是不可避免的。我认为这是一个比较正确的语言设计。@Override
是一个标记,可以帮助编译器找到代码中的错误,也就是说,它可以让您找到没有重写方法的类或接口。如果正确重写该方法,缺少此注释不会影响程序的运行。该注解既可以放置在类方法上,也可以放置在接口方法上。从而将接口与特定的实现联系起来。也就是说,如果从接口中删除重写的方法,编译器将立即生成错误。抽象类和接口在开发过程中不能更改。
也就是说,如果有一个注解
@Override
,那么我们就可以放心地说,在继承的基类或实现的接口中,肯定存在具有相同签名的方法,必须重写该方法。否则,如果没有注释,则可能不存在被重写的方法。也就是说,我们不能确定父类或接口中的方法是否被重写。