java - java中的重叠方法签名

标签 java

老问题:

我在某处读到过,在同一个类中实现具有相似方法签名的两个接口(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) RunnablePlayer 并且两者都有一个 run 方法,那么实现应该是什么样的? Runnable#run 是运行代码片段的通用方法,而 Player#run 可能旨在提高玩家的移动速度。

关于java - java中的重叠方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45759320/

相关文章:

java - 如何在java中执行preg_replace_all

java - 有没有办法调试为什么我的 JavaFX-Project 的可执行 JAR 在我的计算机上运行而不是在其他计算机上运行? (使用jdk 1.8._051)

java - 如何访问 Tomcat 错误页面中的 HTTP 响应文本

java - 使用 Apache Maven 文件管理 API 获取 maven-plugin 中的绝对文件路径

Java 使用 GridBagLayout 限制 JPanel 的宽度

java - 在java类中使用getInstance()

java - 使用 Ebean 查询原始 SQL 时如何映射结果

java - 如何使用while循环,for循环来代替这个do-while循环。

java - 使用 JOptionPane 时行之间有很多空间

java - 如何将Weld集成到maven项目中?