use*_*187 47 java android overriding annotations
我是Android Studio的新手,我想知道@OverrideAndroid Studio中语句的用途.
sna*_*ile 86
@Override是一个Java注释.它告诉编译器以下方法覆盖其超类的方法.例如,假设您实现了Person类.
public class Person {
public final String firstName;
public final String lastName;
//some methods
@Override public boolean equals(Object other) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
person类有一个equals()方法.equals方法已在Person的超类Object中定义.因此,equals()的上述实现是对Persons的equals()的重新定义.也就是说,Person覆盖equals().
在没有明确注释方法的情况下覆盖方法是合法的.那么@Override注释有什么用呢?如果您不小心尝试以这种方式覆盖equals(),该怎么办?
public boolean equals(Person other) {
...
}
Run Code Online (Sandbox Code Playgroud)
上面的案例有一个错误.你的意思是重写equals(),但你没有.为什么?因为真正的equals()获取一个Object作为参数,你的equals()获取一个Person作为参数.编译器不会告诉您有关该错误的信息,因为编译器不知道您想要覆盖.就编译器而言,你实际上意味着重载 equals().但是如果你试图使用@Override注释覆盖equals:
@Override public boolean equals(Person other) {
...
}
Run Code Online (Sandbox Code Playgroud)
现在编译器知道你有错误.你想覆盖,但你没有.因此,使用@Override注释的原因是显式声明方法覆盖.
Ber*_*t F 20
它是一个Java注释(不是特定于Android的).您可以使用它来表示此方法覆盖方法.
之所以用它是当你创建你打算重写的方法的方法来捕获错误,而是通过一些错误,但它不是,例如错字方法名,方法签名等.例如一个错误,有时候开发者会这样:
class Foo {
public boolean equals(Foo other) {
...
Run Code Online (Sandbox Code Playgroud)
作者希望这可以覆盖超类的equals方法,但它不会(参数类型应该是Object).该程序将编译正常,但不会Foo.equals按照作者的意图使用.
class Foo {
@Override
public boolean equals(Foo other) {
...
Run Code Online (Sandbox Code Playgroud)
编译现在会出错,因为该方法不会覆盖另一个方法.这提前指出了问题,并希望节省一些调试时间来追踪问题.
| 归档时间: |
|
| 查看次数: |
45001 次 |
| 最近记录: |