【问题标题】:why do we need abstract classes in Java? [closed]为什么我们需要 Java 中的抽象类? [关闭]
【发布时间】:2014-02-28 04:08:15
【问题描述】:

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

【问题讨论】:

  • @blunderboy - 相信我,这比他/她上次问的要温和得多。
  • 没有太多证据表明上次阅读过答案,但至少是礼貌的。
  • @keshlam 在他/她有机会阅读之前,它可能已被删除。我在删除问题时对其进行了编辑,希望能保存它,但我太慢了。
  • 这其实是个好问题。不幸的是,它已关闭。

标签: java class abstract-class abstract abstract-methods


【解决方案1】:

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

例如:

Abstract Class Animal 

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

现在

 Concrete Class Dog, Cat etc.

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

【讨论】:

  • 这是一个很好的简单解释。我喜欢这个答案。所以你可以使用抽象类的子类。抽象方法是一样的还是没有子方法之类的?
  • 如果您满意,您应该接受 is 作为答案。
  • 但是如果在抽象“Animal”上声明例如“breathe()”,甚至“breathe()”只是声明(没有函数的“主体”),所以我们需要重新在“狗”和“猫”中创建“呼吸()”,那么“动物”有什么好处?
【解决方案2】:

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

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

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

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

【讨论】:

  • 你能否举一个例子,我们不需要为抽象类编写虚拟实现,而另一个类需要我们编写虚拟实现。我很困惑,希望你能解释和详细说明。
【解决方案3】:

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

例如,

您的程序中可能需要执行三个步骤,

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

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

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

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 2012-12-20
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2015-06-05
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多