抽象类和非抽象超类

use*_*437 1 java inheritance

如果你有一个名为Car的抽象超类,并且它有各种子类,并且没有实现的抽象方法,为什么还要使用抽象类引用变量.即

Car myCar=new Honda(); 
Run Code Online (Sandbox Code Playgroud)

在Car类中,只有抽象方法没有实现,所以没有用是没有用的?

Ted*_*opp 5

它根本没用.它允许您编写依赖于对象的代码,Car而不知道有关特定类型的任何内容Car.

public abstract class Car {
    public abstract void tootHorn();
    public abstract void swerve();
    . . .
}

public class Driver {
    private Car car;
    public Driver(Car car) {
         this.car = car;
    }

    public void dealWithDanger() {
        car.tootHorn();
        car.swerve();
    }
    . . .
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中发布,Car可以很容易就是一个interface.但是,通过使它成为一个类,可以直接在Car类中实现某些方法,这些方法依赖于子类指定的抽象方法的(尚未指定的)行为.

抽象类的关键点是你从来没有抽象类本身的实例; 代码只能创建一些具体子类的实例.然而,可以编写许多应用程序逻辑以独立于对象的特定类.