【问题标题】:Class inheriting from several Interfaces having same method signature从具有相同方法签名的多个接口继承的类
【发布时间】:2011-06-02 06:08:23
【问题描述】:

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

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

【问题讨论】:

  • 如果您有三个签名不兼容的方法,它们应该有不同的名称来描述它们的作用。调用你所有的方法method 是没有意义的。你可以试试,但会有帮助吗?

标签: java oop interface


【解决方案1】:

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

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

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

  • 如果您实际上想要为每个接口使用不同版本的方法,那么您将陷入困境。你不能在 Java 中做到这一点。


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

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

那么返回类型何时兼容?

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 2011-01-23
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      相关资源
      最近更新 更多