抽象类和非抽象超类

时间:2013-11-05 01:05:41

标签: java inheritance

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

Car myCar=new Honda(); 

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

4 个答案:

答案 0 :(得分: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();
    }
    . . .
}

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

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

答案 1 :(得分:0)

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

Car car = new Car();

创造一辆汽车毫无意义。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

不是真的。汽车是本田之上的抽象。因此,在未来,您可以换掉本田,而无需担心大规模修改代码。在我的情况下,随着我的家庭成长,我从本田思域切换到斯巴鲁傲虎。猜猜看,我不需要重新学习驾驶,因为“驾驶API”保持不变,我已经知道如何开车了。