我知道你不能创建Abstract类的实例,而Abstract类的子类可以继承第一个Abstract类的继承属性,但是当你拥有普通的Super类时,我无法理解为什么Abstract类需要存在。他们的子课程。 Abstract类的好处/应用是什么?
答案 0 :(得分:3)
抽象类防止“不完整”的抽象实现被实例化。
例如,抽象类可能没有任何实现的抽象方法。实际调用这样的方法是没有效的。
或者,抽象类可能没有任何实际的抽象方法 - 但仍可能需要在子类API中添加其他功能,因为它很有用。
abstract
关键字用于这两个原因&防止抽象类被实例化。
答案 1 :(得分:1)
abstract class Animal { }
class Dog extends Animal { }
class Cat extends Animal { }
如果可以实例化它,Animal
会是什么?
当超级类不是要实例化时,你应该使用abstract
类:它可以作为扩展类依赖的基础,但它本身并不代表任何东西。< / p>
通过让Animal
类作为Dog
和Cat
的基类,您可以在其中定义公共行为,而不必在每个子类中重新定义它。考虑Name
,Species
和FirstSighting
等属性:这些属性将在Cat
和Dog
中使用,所以为什么不将它们放在基类中以避免额外的工作和不一致的问题?
另一方面,你也不想创建一个新的Animal
:它没有说明动物的类型。这就是你成为abstract
的原因。
答案 2 :(得分:0)
抽象类/接口的主要目的是模拟问题的抽象 - 设计。然后真正的实现将根据抽象行为。