Android Studio中@override的含义

时间:2011-01-19 14:13:35

标签: java android annotations override

我是Android Studio的新手,我想知道Android Studio中@Override语句的用途。

6 个答案:

答案 0 :(得分:84)

@Override是Java annotation。它告诉编译器以下方法overridessuperclass的方法。例如,假设您实现了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注释,表示您正在覆盖超类方法。