@override的Android Studio中的意义[复制]

问题描述 投票:47回答:6

这个问题已经在这里有一个答案:

我完全新的到Android Studio和我想知道Android Studio中的@Override声明的目的。

java android annotations override
6个回答
85
投票

@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方法在人的超Object已定义。因此,上述实施的equals()是equals()方法用于人的重新定义。也就是说,人覆盖equals()方法。

它是合法的覆盖方法没有明确标注它。那么,什么是@Override批注好?如果你不小心忽略equals()这种方式:

public boolean equals(Person other) {
   ...
}

在上述情况下有一个bug。你的意思是重写equals(),但你没有。为什么?因为真正的equals()方法获得一个对象作为参数,你的equals()方法得到一个人作为一个参数。编译器是不会告诉你的错误,因为编译器不知道你想覆盖。至于编译器可以告诉你其实是要overload equals()方法。但是,如果你想使用覆盖的@Override批注相当于:

@Override public boolean equals(Person other) {
   ...
}

现在,编译器知道你有一个错误。你想覆盖,但你没有。因此,要使用@Override批注的原因是为了明确宣布方法覆盖。


20
投票

它的一个Java注释(未Android相关)。您可以使用它意味着此方法覆盖的方法。

之所以用它是当你创建一个方法来发现错误,你打算重写的方法,而是通过一定的误差,这不,例如错字在方法名,在该方法签名的错误,等。例如,有时开发这样:

class Foo { 
    public boolean equals(Foo other) {
       ...

作者的意图借此覆盖父类的方法equals,但它不会(参数类型应该是Object)。该程序可以编译罚款,但不会使用Foo.equals作为作者的意图。

class Foo {
    @Override
    public boolean equals(Foo other) {
       ...

编译现在将给出一个错误,因为该方法不覆盖的另一种方法。这种早期的指出了这个问题,并希望节省一些时间调试跟踪问题。


7
投票

这是一个Java注解,告诉该方法旨在覆盖从超类的方法,编译器。这不是绝对必要的,但确实有助于在编译时捕获错误。


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){

    }

}

2
投票

这是Java中的annotation。这标志着该方法旨在重写超类中的方法。


0
投票

这是一个特殊的,编译器保留,Java的注解,表示要覆盖的超类方法。

© www.soinside.com 2019 - 2024. All rights reserved.