我正在尝试在java中测试 @Override 注释。首先,我使用和不带参数重载 overloadedMethod
类中的 Overload
。
public class Overload {
//overloaded method with and without param
public void overloadedMethod(){
System.out.println("overloadedMethod(): No parameter");
}
public void overloadedMethod(String s){
System.out.println("overloadedMethod(): String");
}
}
然后 Override
是 Overload
类的子类。我尝试覆盖其中一个 overloadedMethod
。添加 @Override
注释以确保此方法正确覆盖。
public class Override extends Overload{
//now I want to override
@Override
public void overloadedMethod(String s){
System.out.println("overloadedMethod(): String is overrided");
}
/**
* MAIN
* @param args void
*/
public static void main(String[] args){
Override myOverride=new Override();
//test
myOverride.overloadedMethod();
myOverride.overloadedMethod("Hello");
}
}
但是发生了错误:覆盖无法转换为注释
/Users/Wei/java/com/ciaoshen/thinkinjava/chapter7/Override.java:20: error: incompatible types: Override cannot be converted to Annotation
@Override
^
1 error
任何人都可以告诉我这里的问题是什么?
答案 0 :(得分:9)
编译器认为您尝试将您的类用作注释。
注释与类共享相同的命名空间。这就是为什么使用用于导入类的相同语句导入它们的原因。由于您现在在当前包中有一个具有相同名称的类,因此该类优先于来自不同包的注释。
您可以使用注释的全名:
@java.lang.Override
public void overloadedMethod(String s){
System.out.println("overloadedMethod(): String is overrided");
}
答案 1 :(得分:5)
不要调用类覆盖或使用包的完整名称:
@java.lang.Override
答案 2 :(得分:2)
注释覆盖定义为
@interface Override {
....
你已经定义了一个名为Override
的类......
这会在编译器中产生冲突,因为一个名称与项目中的两个不同的东西有关...
将您的类重命名为MyOverride之类的其他内容,或者将注释用作注释的全名。
@java.lang.Override
public void overloadedMethod(String s){...