老问题:
我在某处读到过,在同一个类中实现具有相似方法签名的两个接口(interface)并不是一个好的选择,并且可能会导致问题。像承保这样的小程序就可以很好地工作。那么,会出现什么样的问题呢?是未定义的行为还是会导致设计问题?我无法得到它。语言规范中的一些内容将会有所帮助。
/* ------------------ */
public interface IA {
public void method();
}
public interface IB {
public void method();
}
/* ------------------ */
public class C implements IA, IB
{
@Override
public void method()
{
System.out.println("class implementing two interfaces");
}
public static void main(String args[])
{
new C().method();
}
}
编辑:
我知道菱形继承(钻石问题),如果我没记错的话,Java 会避免它。我的观点不同。因此,作为编辑,我将我的问题重新表述为,既然“在同一个类中实现两个具有相似方法签名的接口(interface)”在 java 中是完全有效的,那么为什么这样做被认为是一个糟糕的选择呢? 从设计的角度,以及这种实践中可能存在的任何其他问题。
最佳答案
我认为这里的主要问题是设计问题。相同的方法名称对于不同的接口(interface)可能具有不同的语义。例如,如果您实现接口(interface) Runnable
和 Player
并且两者都有一个 run
方法,那么实现应该是什么样的? Runnable#run
是运行代码片段的通用方法,而 Player#run
可能旨在提高玩家的移动速度。
关于java - java中的重叠方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45759320/