请看上面的代码。老师告诉我们,抽象类可以作为软件开发中实现开闭原则的工具。以上面的代码为例来说明这一点。老师说所有车辆通用的方法,比如Stop和Fill,都封装在Vehicle类中。这些方法的不同实现是通过重写在 Car 和 Truck 类中实现的。我理解这种方法,但我认为没有必要使用抽象类。我们可以通过常规课程达到同样的效果,对吧?
将 Vehicle 设置为常规类,仅实现其中的 Stop 和 Fill 方法。然后,让Car和Truck继承自Vehicle并实现各自的Run方法。在程序开始时,使用
Var v = new Truck()
或
Truck v = new Truck()
并且仍然可以使用
v.Run()
所以,我不明白使用抽象类的必要性?
你是对的。没有必要使用抽象类来实现此行为。 但是,使用常规课程,您将能够实例化
Vehicle
,这取决于您的目标,而不是您想要允许的。将类声明为 abstract
的目的是确保该类用于其目的,即在本例中被继承。
您认为可以使用常规课程来说明开放/封闭原则,这是正确的。
然而,抽象类更适合说明原理,因为从本质上讲,它们被设计为可扩展的,即“开放”扩展。
相比之下,常规类可以制成“最终”(JAVA)或“密封”(C#),事实上,清楚地与客户端(使用您的类的代码)沟通是否构造您的结构被认为是良好的编程正在提供开放或关闭的扩展。