在下图中,AbstractPainter
是一个实现IPainter
的抽象类。 ContemporaryPainter
和PastPainter
是扩展AbstractPainter
的类。考虑到这一点,请PastPainter
和AbstractPainter
延长IPainter
吗?或者他们只扩展AbstractPainter
?
谢谢!
答案 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)
是PastPainter
和ContemporaryPainter
属于IPainter
类型,因为它们扩展AbstractPainter
,实现IPainter
。
例如:假设ClassA
实现或扩展ClassB
。然后,如果ClassC
扩展/实现ClassA
,则自动ClassC
也是ClassB
的类型。
任何子类都是其超类的类型,也是其超类继承的类型。
答案 3 :(得分:0)
从语义的角度来看,你的例子中的接口和abtract类是多余的。将提出抽象类的定义。但是,明确UML遵循你的问题的答案是,AsbtractPainter没有直接实现接口IPainter,而是专门为你抽象类而不是抽象的类的实例。定义专业类可以替代普通类也很重要。