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



为什么Java不允许重写静态方法?,它声称在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后,输出为Child方法的2

javac是OpenJDK的javac 1.7.0_79版本

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

这里没有重写任何东西…您刚刚在Child类中定义了一个名为getActivity()的函数,该函数与Parent类中的函数getActivity()不同。

UPDATE: From this question:

并不意味着它是重写的。在这种情况下,它是JLS第8.4.8.3节中的规则,"重写和隐藏的要求":

最新更新