如何解决为什么我可以覆盖静态接口方法?
我找不到很好的消息来源来解释原因:
;memory_limit=-1
abstract class AA {
public static void log() {}
}
class BB extends AA {
public void log() {} //error
}
解决方法
如果子类定义了一个与其父类中的静态方法具有相同签名的静态方法,则子类中的方法会隐藏超类中的该方法。这不同于以两种方式覆盖实例方法:
- 重写实例方法并调用它时,您将在子类中调用该方法。
- 对静态方法执行相同操作时,所调用的版本取决于您从哪个类调用它。
对于接口,接口中的静态方法不会被继承。因此,从技术上讲,这不是替代。在您的示例中,您可以从类log()
调用DD
,也可以从接口log()
调用CC
(在这种情况下,您需要使用名称进行调用接口的{:CC.log()
)。它们是单独的方法。
This是覆盖方法的很好资源,该方法覆盖了类中的静态方法和实例方法以及接口中的静态方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。