为什么我们需要Java中的抽象类?

use*_*801 17 java abstract-class class abstract abstract-methods

为什么我们需要Java中的抽象类?如果你永远不会把它变成一个物体,那为什么要把它放在一起呢?你如何使用它?为什么会这样?我用抽象方法想知道同样的事情.我发现这似乎是一个类似的概念,有一个没有子类的超级类可能无关紧要.

Sca*_*bat 30

抽象类可以用作其他类的模板类型.抽象类将为扩展它的所有类保留通用功能.

例如:

Abstract Class Animal 
Run Code Online (Sandbox Code Playgroud)

所有动物都会移动,呼吸和繁殖,因此这些动物可以放入动物类.

现在

 Concrete Class Dog, Cat etc.
Run Code Online (Sandbox Code Playgroud)

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


kes*_*lam 16

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

如果没有抽象类,你将不得不提供你想要覆盖的方法的虚拟实现......这可以做到,但是那时就有可能忘记实现其中一个.让一些方法保持完全抽象确保真正的实现必须填补空白,或继续自己抽象并迫使他们的后代这样做.

这不是语言不能没有的东西.但它非常有用.当您熟练掌握Java和OO设计时,您会发现它是多么有用.

(请注意,基本上,我们上次提到同样的问题.上次你提出这个问题.所以,如果你仍然感到困惑,你可能想要更具体地说明你究竟是什么让你感到困惑.)


Har*_*nki 12

抽象类的使用很多,抽象类的主要目的是作为基类运行,可以通过子类进行扩展以创建完整的实现.

例如,

您可以在程序中实施三个步骤,

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

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)

另外,上面抽象类Animal的例子也是一个很好的例子.