【发布时间】:2016-03-21 19:52:37
【问题描述】:
我在 Java 中有以下示例:
public abstract class Vehicle {
private final String name;
private final String make;
public Vehicle(final String name, final String make) {
this.make = make;
this.name = name;
}
}
public final class Car extends Vehicle {
public Car(final String name, final String make) {
super(name, make);
}
}
public final class Truck extends Vehicle {
final Integer grossVehicleWeight;
public Truck(final String name, final String make, final Integer gvw) {
super(name, make);
this.grossVehicleWeight = gvw;
}
假设我想对车辆进行一些工作,并且该工作不依赖于车辆的子类。所以,我在另一个类中有这样的方法:
public void doStuff(public final Vehicle vehicle) {
//do stuff here
//then insert it into my database:
insertVehicle(vehicle);
}
但是,我想在我的 insertVehicle 中做不同的事情,所以我为每个子类重写该方法:
public void insertVehicle(Car car) { //do stuff for a car }
public void insertVehicle(Truck truck) { //do stuff for a truck }
在我的 doStuff 方法中,我可以使用 instanceOf 来确定车辆的类别(汽车或卡车),然后将车辆转换为该类别并像这样调用 insertVehicle 方法:
public void doStuff(public final Vehicle vehicle) {
//do stuff here
//then insert it into my database:
if (vehicle instanceof Car) {
insertVehicle((Car) vehicle);
} else {
insertVehicle((truck) vehicle);
}
}
但是,我读到使用 instanceof 并不是最好的方法。 1
我怎样才能最好地返工,这样我就不必使用 instanceof?
【问题讨论】:
-
这些 insertVehicle 方法有什么作用? OO 方法是使 insertVehicle(或此方法的特定部分)成为 Vehicle 的实例方法,在每个子类中重写。或者使用访问者模式。发布您的代码以获得更具体的帮助。
标签: java polymorphism subclassing