我是Android Studio的新手,我想知道Android Studio中@Override
语句的用途。
答案 0 :(得分:84)
@Override是Java annotation。它告诉编译器以下方法overrides是superclass的方法。例如,假设您实现了Person类。
public class Person {
public final String firstName;
public final String lastName;
//some methods
@Override public boolean equals(Object other) {
...
}
}
person类有一个equals()方法。 equals方法已经在Person的超类Object中定义。因此,equals()的上述实现是对Persons的equals()的重新定义。也就是说,Person覆盖equals()。
在没有明确注释方法的情况下覆盖方法是合法的。那么@Override注释有什么用呢?如果您不小心尝试以这种方式覆盖equals(),那该怎么办:
public boolean equals(Person other) {
...
}
以上案例有一个错误。你的意思是重写equals(),但你没有。为什么?因为真正的equals()获取一个Object作为参数,你的equals()获取一个Person作为参数。编译器不会告诉您有关该错误的信息,因为编译器不知道您想要覆盖。就编译器而言,实际上你的意思是overload等于()。但是如果你试图使用@Override注释覆盖equals:
@Override public boolean equals(Person other) {
...
}
现在编译器知道你有错误。你想覆盖,但你没有。因此,使用@Override注释的原因是显式声明方法覆盖。
答案 1 :(得分:20)
它是一个Java注释(不是特定于Android的)。您可以使用它来表示此方法覆盖方法。
使用它的原因是在创建要覆盖方法的方法时捕获错误,但是由于某些错误,它不,例如方法名称中的拼写错误,方法签名中的错误等等。例如,有时开发人员会这样:
class Foo {
public boolean equals(Foo other) {
...
作者希望这可以覆盖超类'equals
方法,但它不会(参数类型应为Object
)。程序编译正常,但不会像作者那样使用Foo.equals
。
class Foo {
@Override
public boolean equals(Foo other) {
...
编译现在会出错,因为该方法不会覆盖其他方法。这提前指出了问题,并希望节省一些调试时间来追踪问题。
答案 2 :(得分:7)
这是一个Java注释,告诉编译器该方法旨在覆盖超类中的方法。它不是绝对必要的,但确实有助于在编译时捕获错误。
答案 3 :(得分:4)
@Override
是一个java annotation
。
表示方法声明旨在覆盖超类中的方法声明。如果使用此批注类型注释方法但不覆盖超类方法,则编译器需要生成错误消息。
另见
示例:
class Parent{
public void foo(){
}
}
class Child extends Parent{
//compile perfect !
@Override
public void foo(){
}
//will show compile time error message here as it is not being overridden
@Override
public void foo(int i){
}
}
答案 4 :(得分:2)
Java中的annotation。它标志着该方法旨在覆盖超类中的方法。
答案 5 :(得分:0)
这是一个特殊的,编译器保留的Java注释,表示您正在覆盖超类方法。