19

为什么我们需要 Java 中的抽象类?如果你永远不会把它变成一个对象,为什么首先要有它?你如何使用它?为什么会在那里?我想知道与抽象方法相同的事情。我发现这似乎是一个类似于拥有一个没有子类的超类的概念,这些子类可能很重要。

4

3 回答 3

30

抽象类可以用作其他类的模板类型。抽象类将拥有所有扩展它的类的通用功能。

例如:

Abstract Class Animal 

所有的动物都会移动、呼吸和繁殖,因此可以将它们归入动物类。

现在

 Concrete Class Dog, Cat etc.

已经提供了这些基本功能。

于 2014-02-28T04:13:15.640 回答
18

抽象类允许提供类中方法的部分默认实现。由于它们不完整,因此它们不能被实例化和按原样使用,但它们可以被子类化以特定于特定实现的方式添加缺失的细节,并且可以实例化这些子类。

如果没有抽象类,您将不得不提供您打算覆盖的方法的虚拟实现......这可以完成,但是会有忘记实现其中一个的风险。让一些方法保持完全抽象可确保真正的实现必须填补空白,或者继续抽象自身并迫使其后代这样做。

这不是语言不能没有的东西。但它非常有用。随着您越来越精通 Java 和 OO 设计,您会发现它的用处。

(请注意,基本上,上次您提出这个问题时,我们说了同样的话。因此,如果您仍然感到困惑,您可能想更具体地了解究竟是什么让您感到困惑。)

于 2014-02-28T04:13:33.970 回答
13

抽象类有很多用途,抽象类的主要目的是充当基类,可以通过子类扩展以创建完整的实现。

例如,

您可能需要在程序中实施三个步骤,

  • 行动前几步
  • 一些要执行的动作
  • 动作后几步

因此,在这种情况下,您可以使用以下三个方法定义一个抽象类:

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的例子也是一个很好的例子。

于 2014-02-28T04:31:26.437 回答