何时使用抽象类?

bal*_*569 77 .net c# abstract-class

这是关于抽象类的MSDN文章,但我真的不明白......

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

ric*_*ard 137

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

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

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

  • 动物会定义对颜色,腿数和大小属性的需求,因此在将Cat视为动物时,我热切期望Animal有颜色,腿数和大小.我还认为你可以在基类中合法地实现这些属性,否则会导致重复的代码.这里的描述有点陷入属性而不是方法,动物实施"移动"方法没有意义,因为每只动物可能有不同的运动方法,但它会定义"移动"的需要方法. (15认同)

小智 6

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

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


Pup*_*ppy 5

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


Ant*_*hin 5

理查德提供了一个例子,抽象类比非抽象类有优势。

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

在此处输入图片说明