何时使用抽象类?

时间:2010-04-03 09:43:33

标签: c# .net abstract-class

这是关于abstract classes的MSDN文章,但我真的不明白......

我什么时候应该使用抽象类?使用抽象类有什么好处?

6 个答案:

答案 0 :(得分:135)

当您需要一个用于继承和多态的类时,抽象类很有用,但实例化类本身,只有它的子类是没有意义的。当您想要为一组共享一些常见实现代码的子类定义模板时,通常会使用它们,但您也希望保证不能创建超类的对象。

例如,假设您需要创建Dog,Cat,Hamster和Fish对象。它们具有类似的属性,如颜色,大小和腿数以及行为,因此您可以创建一个Animal超类。但是,什么颜色的动物? Animal对象有多少条腿?在这种情况下,实例化Animal类型的对象而不仅仅是它的子类没有多大意义。

抽象类在多态中也有额外的好处 - 允许您使用(抽象)超类的类型作为方法参数或返回类型。例如,如果您有一个带有train()方法的PetOwner类,则可以将其定义为接收类型为Animal的对象,例如训练(动物a),而不是为动物的每个子类型创建一个方法。

答案 1 :(得分:6)

通过使用抽象类,我们可以使类更通用。

例如:如果类A是一个抽象类,并且有类B类,类C和类D扩展抽象类A,那么这些子类将继承一个已在抽象类A中声明的方法,从而使方法成为可能更通用。

答案 2 :(得分:4)

您将它们用于永远不会创建的类(因此实际上不存在),但是出于多态原因,您希望从它们继承。

答案 3 :(得分:3)

在为类heirarchy中的类定义行为时使用抽象类,该类永远不会用于直接实例化对象。

所以,暂时把自己想象成上帝吧。您的CBabyBoy和CBanyGirl类不是抽象的 - 因为这些是可以创建的实体对象。另一方面,您的CPerson和CAnimal类应该是抽象的 - 从类型层次结构的角度看它们很有用,但是您永远不会运行CAnimal dingbat = new Animal();

答案 4 :(得分:3)

Richard提供an example是一个抽象类,它优于非抽象类。

我想添加一个事实表,用于在抽象类和接口之间进行选择。可以找到图像here

enter image description here

答案 5 :(得分:2)

基本上,你应该使用一个抽象类,当你的层次结构中的某个实体逻辑上会有不知道如何实现的方法时,它的后代就是这样。网上有数十亿“现实生活”的例子,真的是这样的。