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

时间:2011-06-02 06:08:23

标签: java oop interface

1)如何解决Java中的this问题?

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

2 个答案:

答案 0 :(得分:8)

  

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

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

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

  • 如果您确实需要为每个界面使用不同版本的方法,那么您就会陷入困境。你不能用Java做到这一点。


  

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

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

那么返回类型何时兼容?

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

  • 在Java 5.0中,修改了该语言,以允许您覆盖/实现一个返回类型为被覆盖/已实现方法的返回类型的子类的方法。 / p>

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

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

答案 1 :(得分:3)

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

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

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

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