困惑:@Override无法在java中转换为Annotation?

时间:2016-03-19 22:03:56

标签: java

我正在尝试在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

任何人都可以告诉我这里的问题是什么?

3 个答案:

答案 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){...