为什么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节中的规则,"重写和隐藏的要求":