2011-08-21 77 views
2

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

+0

Class1.Method,Class2.Method,这是他们如何不同。没有歧义。 – atoMerz

+0

是关于PHP或Java的问题吗? – Mat

+0

@Mat这个问题是通用的,我尝试了两种语言。所以我把它标记为开放以回应任何社区。 –

回答

2

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

请注意,您可以通过方法x()获得一个类,然后使用一个子类来扩展该类,该子类声明自己实现了一些包含方法x()的接口;孩子会使用继承的方法自动满足接口,而接口本身并不知道接口方法。如您所见,Java接口纯粹是声明式的;他们并不关心方法来自哪里,只是所讨论的类包含它们。

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

+0

感谢您的回答。 –

0

如果方法相同,方法名称中不会有歧义。

所以,从本质上讲,Java没有问题,因为实现类只应提供一个实现。