Ich habe folgendes Beispiel in Java:die richtige Methode für ein Objekt aufrufen, wenn das Objekt eine Instanz einer Basisklasse ist
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;
}
sagen, dass ich etwas Arbeit mit einem Fahrzeug tun wollen, und die Arbeit ist nicht abhängig von der Unterklasse des Fahrzeugs. So habe ich eine Methode in einer anderen Klasse wie folgt:
public void doStuff(public final Vehicle vehicle) {
//do stuff here
//then insert it into my database:
insertVehicle(vehicle);
}
Allerdings möchte ich in meinem insertVehicle verschiedene Dinge zu tun, so überschreiben ich diese Methode für jede Unterklasse:
public void insertVehicle(Car car) { //do stuff for a car }
public void insertVehicle(Truck truck) { //do stuff for a truck }
In meinem doStuff Methode I instanceOf verwenden könnte die Klasse des Fahrzeugs (PKW oder LKW), und dann gegossen, das Fahrzeug in dieser Klasse und rufen die insertVehicle Methode wie folgt zu bestimmen:
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);
}
}
ich habe jedoch r ead, dass instanceof ist nicht der beste Weg, dies zu tun. 1
Wie kann ich das am besten überarbeiten, damit ich instanceof nicht verwenden muss?
Was machen diese insertVehicle-Methoden? Die OO-Methode besteht darin, insertVehicle (oder den spezifischen Teil dieser Methode) zu einer Instanzmethode von Vehicle zu machen, die in jeder Unterklasse außer Kraft gesetzt wird. Oder um das Besuchermuster zu verwenden. Posten Sie Ihren Code für konkretere Hilfe. –