何时使用抽象类?

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

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

当你需要一个inheritance和多态的类时,抽象类是很有用的,但是实例化类本身,仅仅是它的子类是没有意义的。 当你想为一组共享某些通用的实现代码的子类定义一个模板时,通常使用它们,但是你也要保证不能创build超类的对象。

例如,假设您需要创buildDog,Cat,Hamster和Fish对象。 它们拥有类似的属性,如颜色,大小,腿的数量以及行为,所以你创build一个动物超类。 但是,什么颜色是动物? 动物物体有多less条腿? 在这种情况下,实例化一个Animaltypes的对象并不是很有意义,而只是实例化它的子类。

抽象类还具有多态性的附加好处 – 允许您使用(抽象)超类的types作为方法参数或返回types。 例如,如果你有一个带有train()方法的PetOwner类,你可以将它定义为接受一个types为Animal的对象,如train(Animal a),而不是为每个Animal的子types创build一个方法。

你使用它们的类永远不会被创build(所以实际上不存在),但是你想从多态性的angular度inheritance它们。

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

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

在定义类的行为时,使用抽象类是不会直接实例化对象的。

所以,把自己想象成上帝吧。 你的CBabyBoy和CBanyGirl类不会是抽象的 – 因为这些是创build的固体对象。 另一方面,你的CPerson和CAnimal类将是抽象的 – 它们从types层次的angular度来看是有用的,但是你永远不会运行CAnimal dingbat = new Animal();

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

我想添加一个事实表在抽象类和接口之间进行select。 图像可以在这里find。

在这里输入图像描述

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