【问题标题】:abstract class and non abstract super class抽象类和非抽象超类
【发布时间】:2014-10-29 16:06:38
【问题描述】:

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

Car myCar=new Honda(); 

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

【问题讨论】:

标签: java inheritance


【解决方案1】:

这根本不是无用的。它允许您编写依赖于 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 类中实现一些方法,这些方法取决于子类指定的抽象方法的(尚未指定的)行为。

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

【讨论】:

    【解决方案2】:

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

    Car car = new Car();
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2013-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-16
          • 1970-01-01
          • 2017-03-26
          • 1970-01-01
          相关资源
          最近更新 更多