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

Java 用@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 s

有,, 声明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时出错

删除@Override时,子方法的输出为2

javac是OpenJDK的javac1.7.079版本

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

你在这里什么都不是。。。您刚刚在类Child中定义了一个名为getActivity的函数,它是不同的,并且隐藏了类Parent中的函数getActivity

更新:发件人:

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


不能重写静态方法不能重写静态方法,但可以重新定义它们。这是两种不同的机制。如果使用静态方法扩展类,则可以通过在子类中定义具有相同签名的方法来重新定义方法。任何调用方都必须引用您的子类才能获得重新定义的方法。我在项目中使用过它,效果很好。@Tobb它们不能被重新定义,只能被隐藏,这就是示例中发生的情况。@TheLostMind:隐藏就是这样工作的。在Java和C中,可以通过转换到适当的类型来避免隐藏。我不认为有理由否决这个问题,因为它有所有必要的信息来回答这个问题。向上投票将其恢复为0。没有任何关系-这不是。@aioobe同意并更正,谢谢;
$ 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; }