【发布时间】:2011-06-11 19:04:49
【问题描述】:
我对 Android Studio 完全陌生,我想知道 Android Studio 中 @Override 语句的用途。
【问题讨论】:
标签: java android annotations overriding
我对 Android Studio 完全陌生,我想知道 Android Studio 中 @Override 语句的用途。
【问题讨论】:
标签: java android annotations overriding
@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){
}
}
【讨论】:
@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 作为参数。编译器不会告诉你这个错误,因为编译器不知道你想要覆盖。据编译器所知,您实际上是指overloadequals()。但是,如果您尝试使用 @Override 注释覆盖等于:
@Override public boolean equals(Person other) {
...
}
现在编译器知道你有一个错误。你想覆盖但你没有。所以使用@Override注解的原因是显式声明方法覆盖。
【讨论】:
它是一个 Java 注释(不是特定于 Android 的)。你用它来表示这个方法覆盖一个方法。
使用它的原因是当你创建一个你打算覆盖一个方法的方法时捕获错误,但是由于一些错误,它不是,例如方法名拼写错误、方法签名错误等。例如,有时开发者会这样:
class Foo {
public boolean equals(Foo other) {
...
作者打算这样重写超类的equals 方法,但它没有(参数类型应该是Object)。该程序可以正常编译,但不会像作者预期的那样使用Foo.equals。
class Foo {
@Override
public boolean equals(Foo other) {
...
现在编译会出错,因为该方法没有覆盖另一个方法。这样可以及早指出问题,并有望节省一些跟踪问题的调试时间。
【讨论】:
这是一个 Java 注释,它告诉编译器该方法旨在覆盖超类中的方法。这不是绝对必要的,但确实有助于在编译时捕获错误。
【讨论】:
这是一个特殊的、编译器保留的 Java 注释,表示您正在覆盖超类方法。
【讨论】:
它是 Java 中的 annotation。它标志着该方法旨在覆盖超类中的方法。
【讨论】: