为什么有Java不允许覆盖静态方法?,它声称在Java中不允许覆盖静态方法。但这似乎在OpenJDK中有效:
在不使用时@Override,可以编译这两个类,但在编译时会失败。要重现此文件,文件Parent.java如下所示。
@Override
Parent.java
public class Parent { public static int getActivity() { return 1; } }
和这样的文件Child.java:
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()); } }
使用时,该错误是@OverrideIS
$ 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方法。
2
Child
javac是javac 1.7.0_79OpenJDK的版本。
javac 1.7.0_79
错误在哪里?(理想情况是将其添加@Override到静态方法中,但回答这是in的错误,OpenJDK或者我的想法也不错)
OpenJDK
你是不是覆盖在这里什么…你只定义在类中的函数Child称为getActivity(), 这是独特的和皮 的功能getActivity()类Parent。
getActivity()
Parent
更新: 从这个问题:
这并不意味着它是最重要的。在这种情况下,这就是JLS的8.4.8.3节 “覆盖和隐藏的要求”中的规则: