抽象类的继承

时间:2012-12-11 18:36:55

标签: inheritance diagram

在下图中,AbstractPainter是一个实现IPainter的抽象类。 ContemporaryPainterPastPainter是扩展AbstractPainter的类。考虑到这一点,请PastPainterAbstractPainter延长IPainter吗?或者他们只扩展AbstractPainter

谢谢!Diagram

4 个答案:

答案 0 :(得分:2)

他们只展开AbstractPainter。他们确实实施了IPainter。所以你可以做到

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

它仍然有效。

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

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

它仍然使用“延伸”一词。你仍然不称它为“扩展界面”。

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

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

其他界面扩展了原始界面。

答案 1 :(得分:1)

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

例如,LinkedList实现List界面和AbstractSequentialList

答案 2 :(得分:1)

PastPainterContemporaryPainter属于IPainter类型,因为它们扩展AbstractPainter,实现IPainter

例如:假设ClassA实现或扩展ClassB。然后,如果ClassC扩展/实现ClassA,则自动ClassC也是ClassB的类型。

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

答案 3 :(得分:0)

从语义的角度来看,你的例子中的接口和abtract类是多余的。将提出抽象类的定义。但是,明确UML遵循你的问题的答案是,AsbtractPainter没有直接实现接口IPainter,而是专门为你抽象类而不是抽象的类的实例。定义专业类可以替代普通类也很重要。