Java中为什么需要抽象类?如果你永远不会把它变成一个物体,为什么首先要拥有它呢?你如何使用它?为什么会在那里?
我对抽象方法也有同样的疑问。我发现这似乎与拥有一个没有任何子类的超类类似,而这些子类可能很重要。
抽象类可以用作其他类的模板类型。抽象类将为扩展它的所有类保留通用功能。
例如:
Abstract Class Animal
所有动物都会移动、呼吸和繁殖,因此这些都可以放入动物类中。
现在
Concrete Class Dog, Cat etc.
已经提供了这些基本功能。
抽象类允许在类中提供一组部分方法的默认实现。由于它们不完整,因此无法按原样实例化和使用它们,但可以对它们进行子类化,以特定于特定实现的方式添加缺少的细节,并且可以实例化这些子类。
如果没有抽象类,您将不得不提供您打算重写的方法的虚拟实现……这是可以做到的,但这样就会存在忘记实现其中之一的风险。让某些方法保持完全抽象可确保真正的实现必须填补空白,或者继续本身抽象并迫使其后代这样做。
这并不是语言离不开的东西。但它非常有用。当您更加精通 Java 和 OO 设计时,您会发现它有多么有用。
抽象类有很多用途。抽象类的主要目的是充当基类,可以通过子类扩展以创建完整的实现。
例如,您的程序中可能需要执行三个步骤:
所以在这种情况下,你可以用这样的三个方法定义一个抽象类:
public abstract MyAbstractProcess {
public void stepBefore() {
// Implementation directly in abstract superclass
}
public abstract void action(); // Implemented by subclasses
public void stepAfter() {
// Implementation directly in abstract superclass
}
}
另外,上面的抽象类Animal的例子也是一个非常好的例子。