这是关于abstract classes的MSDN文章,但我真的不明白......
我什么时候应该使用抽象类?使用抽象类有什么好处?
答案 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)
答案 5 :(得分:2)
基本上,你应该使用一个抽象类,当你的层次结构中的某个实体逻辑上会有不知道如何实现的方法时,它的后代就是这样。网上有数十亿“现实生活”的例子,真的是这样的。