在Java中,@Override
注解用于指示一个方法应该覆盖父类中的方法。然而,在使用@Override
注解时,有一些常见的误区需要注意:
class Parent {
void foo(String s) { }
}
class Child extends Parent {
@Override
void foo(int i) { } // 参数类型不匹配,不是覆盖父类方法
}
class Parent {
Number foo() { return 0; }
}
class Child extends Parent {
@Override
String foo() { return ""; } // 返回类型不匹配,不是覆盖父类方法
}
注意:在Java中,协变返回类型是指子类可以声明与父类相同方法签名但返回类型是其子类型的情况。然而,这仅适用于返回值,不适用于方法参数。
public
,那么子类方法也必须是public
才能覆盖它。如果子类方法的访问修饰符更严格,编译器会报错。@Override
注解,或者在同一个类中重复使用@Override
注解。这些情况下,编译器会报错,因为@Override
注解只能用于覆盖父类方法。class Parent {
void foo() { }
}
class Child extends Parent {
@Override
void bar() { } // 错误:不是覆盖父类方法
@Override
void foo() { } // 错误:同一个类中重复使用@Override注解
}
为了避免这些误区,建议在使用@Override
注解时仔细检查方法签名,并确保子类方法与父类方法在参数类型、数量、顺序、返回类型和访问修饰符方面完全匹配。