使用接口集合实现接口

  • 本文关键字:接口 实现 集合 oop
  • 更新时间 :
  • 英文 :


假设我有一个接口IPerson,它公开了另一个接口ICar的集合。ICar 由 Car 类实现,IPerson 由 Person 类实现。我希望那个人可以公开一个 Car 的集合,而不是 ICar,但这似乎是不可能的,如果不改变 IPerson 接口。

还有其他解决方案吗?我想让 IPerson 公开一个 ICar 集合,但我还需要一个实现 IPerson 的类并公开一个 Car 集合。

谢谢

我不知道

此解决方案是否适合您的需求,但是根据您使用的语言,您可以使用通用解决方案来实现这种行为。

例如在爪哇中

interface IPerson<T extends ICar> {
    public T[] getCars();
   // ...
}

这将确保泛型类型T必须实现ICar,然后在您的实现中Person您可以拥有

Class Person implements IPerson<Car> {
   Car[] cars;
   public Car[] getCars() {
        return cars;
   }
   // ...
}

不幸的是,这将不允许您一起查看不同IPersons的集合,因为这不再是IPerson而是IPerson<Car>

如果我

理解正确,您可以将 ICar 类型的集合添加到您的 Person 类中。因为ICar或Car的集合(几乎)是同一件事。

在我看来这是不可能的。

如果 IPerson 有一个 ICars 集合,那么你的 Person 类还需要接受任何 ICar,而不仅仅是你的具体 Car 类。

当然,这是假设IPerson的用户被允许添加ICar实例。如果集合是只读的,那么理论上这可能是可能的,但大多数语言不允许这样做(例如 C# 不允许)。

最新更新