当前位置: 首页 > 面试题库 >

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

严修德
2023-03-14
问题内容

为什么有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或者我的想法也不错)


问题答案:

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

更新: 从这个问题:

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



 类似资料:
  • 问题内容: 是否有一个静态分析工具可以在IDE外部运行一致地强制使用@Override注释?CheckStyle具有MissingOverride检查,但仅适用于使用@inheritDoc Javadoc标记的方法。我正在寻找一种可以在连续集成计算机上的新构建配置中运行的工具。 问题答案: 一种方法是使用TeamCity的“检查”运行器。我不确定它是否真的可以在IDE之外运行,因为它是在Intel

  • 我在想什么时候使用静态方法?假设我有一个类有几个getter和setter,一两个方法,并且我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法? 示例: ...或: 我很困惑!

  • 问题内容: 我想知道何时使用静态方法?假设我有一个带有几个和的类,一个或两个方法,并且我希望这些方法只能在该类的实例对象上调用。这是否意味着我应该使用静态方法? 例如 要么 我很困惑! 问题答案: 一个经验法则:问自己“即使尚未构建Obj,调用此方法是否有意义?” 如果是这样,那肯定是静态的。 因此,在一个类中,Car你可能有一个静态的方法,因为即使没有人制造过汽车,也可能想知道35mpg转换为什

  • 问题内容: 我想知道何时使用静态方法?假设我有一个带有几个getter和setter的类,一个或两个方法,并且我希望这些方法只能在该类的实例对象上调用。这是否意味着我应该使用静态方法? 例如 要么 (这是静态方式吗?) 我很困惑! 问题答案: 一个经验法则:问自己“即使尚未构建Obj,调用此方法是否有意义?” 如果是这样,那肯定是静态的。 因此,在一个类中,你可能有一个静态的方法,因为即使没有人制

  • 问题内容: 我正在使用spring的PreAuthorize注释,如下所示: 但是,我已经在另一个类上将“角色”定义为静态字符串。如果我尝试使用此值: 我收到一个错误: 有没有办法使用PreAuthorize批注访问此类静态变量? 问题答案: 尝试以下使用Spring Expression Language评估类型的方法: 确保指定完全限定的类名。 文献资料

  • 问题内容: 使用Java 注释的最佳实践是什么?为什么? 用注解标记每个覆盖的方法似乎是过大的。是否存在某些编程情况要求使用和其他不应该使用的情况? 问题答案: 每次你重写一种方法都有两个好处时使用它。这样做是为了使你能够利用编译器检查的优势,以确保你认为自己确实覆盖了某个方法。这样,如果你犯了拼写错误的方法名称或不正确匹配参数的常见错误,将会警告你方法实际上并没有像你认为的那样覆盖。其次,它使你