0

在下图中,AbstractPainter是一个实现IPainter. ContemporaryPainter并且PastPainter是扩展的类AbstractPainter。考虑到这一点,做PastPainterAbstractPainter扩展IPainter?或者他们只是延长AbstractPainter

谢谢!图表

4

4 回答 4

2

他们只是扩展AbstractPainter。他们确实实施IPainter。所以你可以做

IPainter painter = new PastPainter();
AbstractPainter otherPainter = new ContemporaryPainter();

它仍然有效。

但是,当在集合中引用它们时,例如

List<? extends IPainter> list = new ...

它仍然使用“扩展”一词。不过,您仍然不称其为“扩展接口”。

唯一的“扩展界面”是如果您制作了类似以下代码段的内容:

public interface IPolymath extends IPainter {
    List<String> getOtherProfessions();
}

其他一些接口扩展了原始接口。

于 2012-12-11T18:40:22.427 回答
1

是的PastPainter,并且ContemporaryPainter是类型,IPainter因为它们扩展AbstractPainter了 which implements IPainter

例如:假设ClassAimplements 或 extends ClassB。然后如果ClassCextends/implements ClassAthen 自动ClassC也是ClassB.

任何子类都是它的超类的类型,也是它的超类继承自的类型。

于 2012-12-11T18:44:30.313 回答
1

在 Java 中,正确的思考方式是扩展抽象类并实现接口。

例如,aLinkedList实现了List接口,而AbstractSequentialList.

于 2012-12-11T18:39:53.587 回答
0

从语义的角度来看,您示例中的接口和抽象类是多余的。抽象类的定义就足够了。但是,对您的问题的明确符合 UML 的答案是,AsbtractPainter 不直接实现接口 IPainter,而是专门为您抽象类而不是抽象的类的实例。定义专用类可以替代通用类也很重要。

于 2014-02-23T17:50:25.853 回答