如果您有一个名为Car的抽象超类,并且您有它的各种子类,并且没有实现的抽象方法,为什么还要抽象类引用变量。即抽象类和非抽象超类
Car myCar=new Honda();
在Car类中只有没有实现的抽象方法,所以它没用没有权利?
如果您有一个名为Car的抽象超类,并且您有它的各种子类,并且没有实现的抽象方法,为什么还要抽象类引用变量。即抽象类和非抽象超类
Car myCar=new Honda();
在Car类中只有没有实现的抽象方法,所以它没用没有权利?
这根本没用。它允许您编写依赖于对象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
类中实现一些依赖于子类指定的抽象方法(尚未指定)行为的方法。
抽象类的关键点是你从来没有抽象类本身的实例;代码只能创建一些具体子类的实例。尽管如此,许多应用程序逻辑可以写成独立于对象的特定类别。
抽象部分阻止您创建一个Car对象是这样的:
Car car = new Car();
这是没有意义的创造不仅仅是一辆汽车。
不是真的。汽车是本田之上的抽象。所以在将来,你可以换掉本田而不用担心大量修改代码。就我而言,随着家庭的成长,我从本田思域转向斯巴鲁傲虎。猜猜看,我不需要重新学习驾驶,因为“驾驶API”保持不变,我已经知道如何驾驶汽车。
这您可能感兴趣的:什么 - 做 - 它 - 平均到程序对一个接口(http://stackoverflow.com/q/383947/1393766)。 – Pshemo