我发现了这个问题:Two Interface with Same Method Name - Implementation of Methods
因此,如果一个类实现了两个接口,则存在一个问题:
假设接口Foo
指定Foo
方法doStuffX()
,接口Bar
指定doStuffY()
。有人实现允许类FooBar
实现booth接口。
后来,我们意识到Foo
需要访问doStuffY
实现,但是在Foo的上下文中有一个不同的略有不同的规范。
现在,当FooBar
传递给任何接受Foo
且依赖doStuffY()
的方法时,可能会中断。
所以,我的结论是不应该实现多个接口。那是对的吗?是否有除内部类之外的任何技术可用于向接口方法添加上下文名称。我想过将Foo
和Bar
引用传递给它们。还有更多方法吗?
答案 0 :(得分:2)
所以,我的结论是不应该实现多个接口
这听起来就像把洗澡水扔出去一样。
虽然确实可能发生两个接口可能互不兼容,但禁止实现任何两个接口是过度限制性的解决方案。真正的解决方案是更加努力地定义接口,以便它们:
这样,你描述的情况不太可能发生。
事实上,你的提议使界面完全没用。接口的要点是将多重继承的一些好处引入到具有单继承的语言中。当您只允许实现一个接口时,接口变得毫无意义 - 当您只能实现一个接口时,您可以只使用单继承。
答案 1 :(得分:1)
结论是,一旦界面发布并且可能由某人使用/实施,就不应该更改或扩展界面。如果您提出需要,那么新界面将是合适的,而不是改变现有界面。
答案 2 :(得分:0)
所以,我的结论是不应该实现多个接口。这是对的吗?
这似乎是核选择。
这里真正的问题是FooBar.doStuffY
没有实现接口强加的合同。 “略有不同的规范”仍然不同,违反了Liskov替代原则。如果你没有这样做那就不会有问题。
也许你需要一个内部版本的doStuffY
来做不同的事情并根据参数决定做什么。这样您就可以遵守接口合同,并且仍允许内部使用网站的行为发生偏离。