从多个接口继承具有相同方法签名的类

4

1) 如何在Java中解决这个问题

2) 如果接口中只有返回类型不同,会发生什么?


相关链接:https://dev59.com/sXE85IYBdhLWcg3w02_z - trutheality
如果你有三个具有不兼容签名的方法,它们应该有不同的名称来描述它们所做的事情。把所有的方法都叫做 method 是没有意义的,你可以尝试,但这会有帮助吗? - Peter Lawrey
2个回答

8

1) 如何在Java中解决这个问题?

本质上,各自接口中的不同“版本”方法都绑定到同一个实现方法。

  • 如果这是您想要的,那就好。

  • 如果您实际上想要每个接口的不同版本,则无能为力。在Java中无法做到这一点。


2) 如果只有接口中的返回类型不同怎么办?

如果返回类型不兼容,则无法编写实现所有接口的类。编译错误。

那么什么情况下返回类型是兼容的呢?

  • 在Java 5.0之前,覆盖或实现方法的返回类型必须与被覆盖或实现方法的返回类型相同。

  • 在Java 5.0中,语言被修改为允许您覆盖/实现具有被覆盖/实现方法返回类型的子类的方法。

因此...如果您使用的是Java 5.0或更高版本...您需要使用与方法所有版本的所有返回类型相同类型或子类的返回类型来实现。如果没有这样的类型,则该类无法实现。显然,对于原始返回类型,这不起作用,因为原始类型之间不存在子类关系。

(注意:在Java 5.0+中,我们谈论的是声明的返回类型之间的子类关系...而不是返回对象的运行时类型。)


3

1) 这不是一个真正的问题,因为接口并没有定义实现。在这个例子中,所有三种情况都会调用相同的实现。

2) 如果返回类型兼容(参见协变返回类型),则没有问题。简单来说,如果新的返回类型扩展了接口中定义的返回类型,则可以更改返回类型:

class A {
 ...
 List returnList();
}

class B extends A {
 ...
 ArrayList returnList(); // possible as an ArrayList is a List
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接