为了好奇心我试过这个:
public interface test1 {
public Object method1(String str);
}
public interface test2 {
public Object method1(String str);
}
public class Test implements test1, test2 {
public static void main(String... args) {
}
public Object method1(String str) {
return new Object();
}
}
我在Eclipse的public class Test implements test1, test2 {
行遇到了某种错误,但没有。
class Test
中继承了多少种方法?我知道从设计的角度来看,这可能不会发生在现实世界的情况中,但正如我在开始时所提到的那样,它只是出现在我脑海中并且我尝试过了。
非常感谢任何澄清/参考。
答案 0 :(得分:7)
没有碰撞。两个接口都需要一个名为method1
的方法,并且示例类中的method1
都满足这两个方法。实现接口时,根本不会继承任何方法;你只是承诺自己实施这些方法。
关于最后一个问题的答案,请参阅现有的SO问题:
Java - Method name collision in interface implementation
有一项建议Java 8允许接口指定一个名为Virtual Extension Methods的默认实现。如果使其成为语言,则两个接口可以为同一方法签名指定不同的默认实现。如果那些接口然后由一个类实现,那么它将必须提供它自己的实现(即它将等同于两个接口都没有指定默认值) - 参见 3.3。违约冲突。
答案 1 :(得分:0)
您的接口在方法中没有任何实现,并且它们的签名是相同的。因此,实际上只有该方法的一个版本,它是Test
类中的实现。
所以实际上没有任何名称冲突。
答案 2 :(得分:0)
a)即使接口中存在方法名称冲突。实现接口的类应该实现接口的所有方法。在这种情况下,由于您的类满足实现接口的所有条件,因此不会产生任何错误。
该类实现了接口Test1的所有方法以及Test2和eventhough方法名称冲突,实现的编码满足,因此不产生错误。
b)实现接口时没有什么比继承更好的了,你需要做的就是在你的类中实现接口的所有方法,否则它必须被声明为抽象类。