使用@Override注释静态方法时出错

时间:2015-05-25 13:38:29

标签: java

Why doesn't Java allow overriding of static methods?, 声称在java中不允许覆盖静态方法。但它似乎在OpenJDK中起作用:

在不使用@Override时编译这两个类,但是 这样做会失败。 为了重现这一点,文件Parent.java看起来像这样。

public class Parent {
    public static int getActivity() { return 1; }
}

Child.java这样的文件:

public class Child extends Parent {
    // @Override public static int getActivity() { return 2; } // fails
    public static int getActivity() { return 2; } // works

    public static void main(String ... args) {
        System.out.println((new Child()).getActivity());
    }
}

使用@Override

时出错
$ javac Child.java
Child.java:3: error: method does not override or implement a method from a supertype
@Override public static int getActivity() { return 2; }

删除@Override方法的2输出为Child时。

javac是OpenJDK的版本javac 1.7.0_79

错误在哪里? (理想情况是将@Override添加到静态 方法,但答案是OpenJDK或我的想法中的这个错误也会很好。

1 个答案:

答案 0 :(得分:2)

这里不是overriding任何内容......您刚刚在班级Child中定义了一个名为getActivity()的函数,这是一个不同的函数,隐藏了函数{在班级getActivity()中{1}}。

更新:来自this question

  

这并不意味着它压倒一切。在这种情况下,它是section 8.4.8.3 of the JLS中的规则,“覆盖和隐藏的要求”: