Первый класс авто:
public class Car {
private final Engine engine;
public Car(int x, int y) {
this.engine = createEngine(x, y);
// (...)
}
protected Engine createEngine(int x, int y) {
return new Engine(x ,y);
}
}
Теперь я хочу создать FastCar, для которого нужен FastEngine, а не просто движок.
public class FastEngine extends Engine {
public FastEngine(int x, int y, double a, double b) {
super(x, y);
// (...)
}
// (...)
}
public class FastCar extends Car {
private final double a;
private final double b;
public FastCar(int x, int y, double a, double b) {
super(x, y);
this.a = a;
this.b = b;
}
@Override
protected Engine createEngine(int x, int y) {
// of course I can't use a and b here, they were not initialized yet :( :( :(
return new FastEngine(x, y /* I need a and b here too :( */);
}
}
Итак, проблема в том, что в моем новом классе FastCar мне нужно переключить Engine для FastEngine, но теперь FastEngine принимает аргументы a и b, переданные в конструкторе. Похоже, я зашел в тупик, что я могу сделать, кроме как переписать все с нуля с новой моделью сущностей?