Inheritance 抽象类的继承
在下图中,Inheritance 抽象类的继承,inheritance,diagram,Inheritance,Diagram,在下图中,AbstractPainter是一个抽象类,它实现了ipainerContemporaryPainter和PastPainter是扩展AbstractPainter的类。考虑到这一点,是否要扩展ipainer?或者它们只是扩展了AbstractPainter 谢谢 在Java中,正确的思考方法是扩展抽象类并实现接口 例如,一个LinkedList实现了List接口和AbstractSequentialList,在Java中,正确的考虑方法是扩展抽象类并实现接口 例如,LinkedLis
AbstractPainter
是一个抽象类,它实现了ipainer
ContemporaryPainter
和PastPainter
是扩展AbstractPainter
的类。考虑到这一点,是否要扩展ipainer
?或者它们只是扩展了AbstractPainter
谢谢 在Java中,正确的思考方法是扩展抽象类并实现接口
例如,一个
LinkedList
实现了List
接口和AbstractSequentialList
,在Java中,正确的考虑方法是扩展抽象类并实现接口
例如,
LinkedList
实现了List
接口和AbstractSequentialList
它们只扩展了AbstractPainter
。它们确实实现了ipainer
。所以你可以
IPainter painter = new PastPainter();
AbstractPainter otherPainter = new ContemporaryPainter();
它仍然是有效的
但是,在集合中引用它们时,如
List<? extends IPainter> list = new ...
List它们只扩展AbstractPainter
。它们确实实现了ipainer
。所以你可以
IPainter painter = new PastPainter();
AbstractPainter otherPainter = new ContemporaryPainter();
它仍然是有效的
但是,在集合中引用它们时,如
List<? extends IPainter> list = new ...
ListYesPastPainter
和ContemporaryPainter
属于IPainter
类型,因为它们扩展了实现IPainter
的AbstractPainter
例如:假设ClassA
实现或扩展ClassB
。如果ClassC
扩展/实现ClassA
,那么自动ClassC
也是ClassB
的类型
任何子类都属于其超类的类型,也属于其超类继承自的类型。YesPastPainter
和ContemporaryPainter
属于iPainer
类型,因为它们扩展了实现iPainer
的AbstractPainter
例如:假设ClassA
实现或扩展ClassB
。如果ClassC
扩展/实现ClassA
,那么自动ClassC
也是ClassB
的类型
任何子类都属于其超类的类型,也属于其超类继承自的类型。从语义角度来看,您示例中的接口和abtract类是冗余的。抽象类的定义将是足够的。但是,对于您的问题,明确的符合UML的答案是,AsbtractPainter并没有直接实现接口iPainer,而是专门化抽象类而非抽象类的类的实例。定义专用类可以替代通用类也很重要 从语义的角度来看,您示例中的接口和abtract类是冗余的。抽象类的定义将是足够的。但是,对于您的问题,明确的符合UML的答案是,AsbtractPainter并没有直接实现接口iPainer,而是专门化抽象类而非抽象类的类的实例。定义专用类可以替代通用类也很重要 这里明显缺少图表。出于某种原因,图表的图片没有显示:这里明显缺少图表。出于某种原因,图表的图片没有显示:谢谢,这帮了大忙!但是,如果,例如,我想要实现一个关于泛型类型的画师的泛型方法呢?我用还是用?你可以用任何一个。如果您有其他ipainer
s,并且您也希望包括这些,则使用T扩展ipainer
。如果要排除这些,请使用AbstractPainter
。如果你没有,也永远不会有其他人,那没关系。谢谢,这帮了大忙!但是,如果,例如,我想要实现一个关于泛型类型的画师的泛型方法呢?我用还是用?你可以用任何一个。如果您有其他ipainer
s,并且您也希望包括这些,则使用T扩展ipainer
。如果要排除这些,请使用AbstractPainter
。如果你没有,也永远不会有任何其他人,那就没关系了。