【问题标题】:Why a class that implements an interface can't use a static method of that interface in Java? [duplicate]为什么实现接口的类不能在Java中使用该接口的静态方法? [复制]
【发布时间】:2017-12-28 22:03:34
【问题描述】:

考虑一个类A,它实现了一个接口B,它有一个static方法info()。为什么不能做A.info()?如果是默认方法,可以做A.info(),我不明白为什么会有区别:它们是不是abstract但已经在interface中定义的两种方法,区别应该只是一个是static 而另一个不是。

【问题讨论】:

  • 静态方法属于类,不可继承。因此没有A.info()这样的东西,静态方法info(),在你的例子中,属于B类,应该通过B.info()调用以避免任何混淆。
  • 除了解释之外,您能否提供示例代码。阅读minimal reproducible example 以获取有关提供良好代码示例的提示。

标签: java interface static default


【解决方案1】:

请记住:静态方法没有多态性。

所以,当你有两个类 A 和 B - 是的,那么你可以调用 A.info()。但这是一种不鼓励的做法——因为您仍在从 B 调用静态方法。

因此猜测:Java 语言背后的人只是想防止人们开始以这种方式在接口中滥用静态方法。

【讨论】:

    【解决方案2】:

    这是有区别的,因为您可以实现多个接口。如果你有一个接口 C,它也有一个静态方法 info(),并且你在类 A 中实现了 B 和 C。这会产生问题,这就是不允许的原因。

    但是当你有两个类 A 和 B 时,这是可能的,因为你只能扩展一个类。

    【讨论】:

    • 但这也可能发生在默认方法上:一个类可以使用具有相同签名的默认方法实现两个接口。
    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 2011-05-10
    • 2011-04-26
    • 2015-02-12
    • 2015-06-05
    • 2013-09-20
    • 2011-04-03
    相关资源
    最近更新 更多