java - 为什么我可以覆盖静态接口(interface)方法?

标签 java methods interface static

我找不到任何好的资料来解释原因:

abstract class AA {
    public static void log() {}
}

class BB extends AA {
    public void log() {} //error
}
interface CC {
    public static void log() {}
}

class DD implements CC {
    public void log() {} //Ok
}

最佳答案

如果子类定义的静态方法与其父类中的另一个静态方法具有相同的签名,则子类中的方法隐藏父类(super class)中的方法。这与以两种方式覆盖实例方法不同:

  • 当您覆盖实例方法并调用它时,您会调用子类中的方法。
  • 当您对静态方法执行相同操作时,调用的版本取决于您从哪个类调用它。

对于接口(interface)来说,接口(interface)中的静态方法是不被继承的。因此,它在技术上不是覆盖。在您的示例中,您可以调用 log()从类 DD ,或者您可以调用 log()来自界面 CC (在这种情况下,您需要使用接口(interface)名称调用它:CC.log())。它们是不同的方法。

This是覆盖方法的好资源,涵盖类中的静态方法和实例方法,以及接口(interface)中的静态方法。

关于java - 为什么我可以覆盖静态接口(interface)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63868869/

相关文章:

interface - 触摸屏书写时需要注意什么?

java - 计算结束时间和开始时间差(以分钟为单位)并验证在 android 中输入的时间

java - native 代码中的段错误

java - 无法将 3 个 JPanel 添加到主面板

javascript - 在 'this' 和对象的原型(prototype)方法中使用 'constructor' 时如何正确返回值?

Java - 定义用于创建对象的行,而不是仅使用方法

java - 我想将整数,字符串,对象, double ,位图,HashMap从一个 Activity 发送到android中的另一个 Activity

java - 检查以确保在执行之前至少已进行一次调用 - 此方法必须返回 int 类型的结果

java - 参数化接口(interface)可以是子接口(interface)吗?

java - 如何在 Eclipse 中找到哪些类实现了特定的接口(interface)?