安卓工作室中@override的含义

2022-08-31 22:19:35

我对Android Studio完全陌生,我想知道Android Studio中声明的目的。@Override


答案 1

@Override是一个Java注释。它告诉编译器以下方法重写超类的方法。例如,假设您实现了一个 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() 的实现是对 Person 的 equals() 的重新定义。也就是说,Person 覆盖 equals()。

重写方法而不显式注释它是合法的。那么@Override注释有什么好处呢?如果你不小心尝试以这种方式覆盖 equals() 怎么办:

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

上述情况有一个错误。你打算覆盖 equals(),但你没有。为什么?因为 real equals() 获取 Object 作为参数,而 equals() 获取 Person 作为参数。编译器不会告诉你这个 bug,因为编译器不知道你想重写。就编译器所知,您实际上意味着重载 equals()。但是,如果您尝试使用@Override注释覆盖等值:

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

现在编译器知道你有一个错误。你想覆盖,但你没有。因此,使用@Override注释的原因是显式声明方法重写。


答案 2

它是一个Java注释(不是特定于Android的)。您可以使用它来表示此方法重写某个方法。

使用它的原因是,当您创建一个打算覆盖方法的方法时,可以捕获错误,但是通过一些错误,它不会,例如方法名称中的拼写错误,方法签名中的错误等。例如,有时开发人员会这样:

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

作者打算重写超类的方法,但事实并非如此(参数类型应为 )。该程序可以正常编译,但不会按照作者的意图使用。equalsObjectFoo.equals

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

编译现在将给出错误,因为该方法不会重写另一个方法。这可以及早指出问题,并希望节省一些跟踪问题的调试时间。


推荐