1

如果您有一个名为 Car 的抽象超类,并且您有它的各种子类,以及没有实现的抽象方法,为什么还要为抽象类引用变量而烦恼。IE

Car myCar=new Honda(); 

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

4

4 回答 4

5

它根本没有用。它允许您编写依赖于 a 的对象的代码,而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();
    }
    . . .
}

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

抽象类的关键是你永远不会拥有抽象类本身的实例。代码只能创建一些具体子类的实例。然而,许多应用程序逻辑可以编写为独立于对象的特定类。

于 2013-11-05T01:10:47.000 回答
0

抽象部分阻止您创建这样的汽车对象:

Car car = new Car();

仅仅创造一辆汽车是没有意义的。

于 2013-11-05T01:10:55.177 回答
0

看看这个:http ://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html我认为这会回答你的问题

于 2013-11-05T01:10:56.217 回答
0

并不真地。汽车是本田之上的抽象。因此,将来您可以更换本田,而不必担心大量修改代码。就我而言,随着家人的成长,我从本田思域转向斯巴鲁傲虎。你猜怎么着,我不需要重新学习驾驶,因为“驾驶 API”保持不变,我已经知道如何驾驶汽车。

于 2013-11-05T01:11:03.643 回答