接口允许任何子类参数

时间:2019-04-17 14:58:52

标签: java inheritance interface

如果我有这样的课程

class SuperType {}

class SubTypeOne extends SuperType {}

class SubTypeTwo extends SuperType {}

我想创建一个这样的界面

interface TypeHandler {
  public void handle(SuperType arg);
}

但是允许它们是有效的实现

class SubTypeOneHandler implements TypeHandler {
  public void handle(SubTypeOne arg) { }
}

如您所见,使用接口中定义的参数类型的子类。

我尝试使用重新编写界面

interface TypeHandler {
  public void handle(? extends SuperType arg);
}

但是看起来这不是有效的Java。

1 个答案:

答案 0 :(得分:3)

从根本上讲是不安全的;如果接口被声明为接受SuperType,则您必须能够使用SuperType的任何子类调用任何实现。

您真正想要的是每个子类型都有不同的类型安全的接口版本。
这就是泛型的用途。您需要使该接口具有通用性。