实现与接口集合的接口

时间:2012-08-06 12:12:20

标签: oop

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

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

谢谢

3 个答案:

答案 0 :(得分:1)

我不知道这个解决方案是否符合您的需求,但是根据您使用的语言,您可以使用通用解决方案来实现这种行为。

例如在java

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>

答案 1 :(得分:0)

如果我理解正确,您只需将类型ICar的集合添加到Person类。因为ICar或Car的集合(ALMOST)是相同的。

答案 2 :(得分:0)

在我看来,这是不可能的。

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

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