【问题标题】:interface implementation confusion?接口实现混乱?
【发布时间】:2011-10-31 16:37:41
【问题描述】:

我看到一个代码,其中有两个接口具有一些方法,其中两个方法具有相同的名称。然后有一个实现这些接口的类,我认为它不应该编译,因为方法名称不明确。为什么它可以正常工作。

【问题讨论】:

  • Class1.Method, Class2.Method, 这就是它们的不同之处。没有歧义。
  • 您的问题是关于 PHP 还是 Java?
  • @Mat 这个问题很笼统,我用两种语言都试过了。因此,我将其标记为开放,以便任何社区做出回应。
  • @AtoMerZ 没有得到你。有一个类实现了具有相同方法名称的两个接口。
  • Java 和 PHP 是非常不同的语言,具有不同的重载和继承规则。如果您对它们都有疑问,即使它们之间唯一的文本区别是语言的名称,也请分别询问。

标签: java php interface


【解决方案1】:

可能出现此问题的每种语言都会以不同的方式解决问题。在某些语言中,这可能是一个错误; C++就是这样。但是在 Java 中,只要这两种方法具有兼容的异常规范——即,只要实际上有可能实现满足两个接口的方法——那么语言规范就特别允许。一个方法满足每个接口,一切都很好。问方法属于哪个接口是没有意义的;它属于两者,或者不属于任何一个。

请注意,您可以拥有一个带有方法x() 的类,然后使用一个子类扩展该类,该子类声明自己以实现一些包含方法x() 的接口;孩子使用继承的方法自动满足接口,该方法本身是在不知道接口的情况下声明的。如您所见,Java 接口是纯声明性的;他们不关心方法来自哪里,只关心相关类包含它们。

我不能为 PHP 说话,但也许它是一样的,但我确信它在一些小细节上有所不同。

【讨论】:

    【解决方案2】:

    如果方法相同,则方法名称没有歧义。

    所以,本质上,Java 中没有问题,因为实现类应该只提供一种实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2014-02-18
      • 1970-01-01
      相关资源
      最近更新 更多