一尘不染

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

java

为什么有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());
    }
}

使用时,该错误是@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方法。

javac是javac 1.7.0_79OpenJDK的版本。

错误在哪里?(理想情况是将其添加@Override到静态方法中,但回答这是in的错误,OpenJDK或者我的想法也不错)


阅读 250

收藏
2020-12-03

共1个答案

一尘不染

你是不是覆盖在这里什么…你只定义在类中的函数Child称为getActivity()
这是独特的和皮 的功能getActivity()Parent

更新:这个问题

这并不意味着它是最重要的。在这种情况下,这就是JLS的8.4.8.3节
“覆盖和隐藏的要求”中的规则:

2020-12-03