Exact use of Abstract class
抽象类的确切用途是什么?在普通类中不可能做与抽象类相同的事情吗?
使用抽象类提供一些具体的实现,但不允许实例化。你总是可以实例化一个普通的类,如果它不能单独存在就没有意义。同时,如果有一个在所有实现类中都相同的具体实现,那么一个接口可能就不够了。抽象类就足够了。
- 接口:仅合同,不实现,不实例化
- 抽象类:契约,一些实现,没有实例化
- 类:合同、实现、实例化
当您希望子类继承某些基本功能时,使用抽象类,但实例化该基类没有意义。例如,如果您有类似于形状基类的东西,那么您可以有一些内置的实现,这些实现可以被子类以及希望子类实现的接口方法使用。但是,创建一个形状对象可能没有意义。抽象类提供了这个功能。抽象类使用的另一个很好的例子是抽象工厂模式。
常规类要求您为所有方法提供实现。接口要求您不要为所有方法提供任何实现。
抽象类是唯一允许两个方法都包含实现的类类型,并且方法都不提供实现,但需要继承类提供实现。
允许您在没有实现的情况下添加方法,这是您无法实例化抽象类的原因:您只能实例化具有所有方法实现的某个对象。
与常规类不同,
同时,它们可以做常规类所能做的其他一切:它们可以实现方法、包含字段和嵌套类型、从另一个类派生等。