何时使用抽象类?

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

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

67520 次浏览

基本上,您应该使用一个抽象类,当您的层次结构中的某个实体在逻辑上拥有方法时,它不知道如何实现,但它的后代知道。事实上,网络上有数十亿个“真实生活”的例子)

当您为类层次结构中永远不会用来直接实例化对象的类定义行为时,请使用抽象类。

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

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

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

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

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

通过使用抽象类,我们能够使类更通用。

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

Richard 已经提供了 一个例子是一个抽象类比非抽象类有优势。

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

enter image description here