Вам действительно нужен новый класс для представления вашего автомобиля (я полагаю, это то, что вы подразумеваете под MyCar).Конечно, ваша машина - это просто экземпляр автомобиля, но с деталями, специфичными для вас?Я хотел бы предложить, чтобы ваш класс автомобиля выглядел следующим образом:
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
public Engine getEngine() {
return engine;
}
}
Теперь, если вы хотите создать экземпляр своего автомобиля, вы можете сделать:
Car myCar = new Car(new PetrolEngine());
Далее ваш класс Engine должен быть либо интерфейсомили абстрактно, в зависимости от того, есть ли у вас какое-то базовое поведение, общее для всех двигателей, например:
public abstract class Engine {
private final String type;
protected Engine(String type) {
this.type = type;
}
public String getType() {
return type;
}
public abstract String getMileage();
}
, затем для PetrolEngine вы делаете:
public class PetrolEngine extends Engine {
public PetrolEngine() {
super("Petrol Engine");
}
public String getMileage() {
// Implement this however you calculate mileage for an Engine
return "100";
}
}
Обратите внимание на использованиезащищенный конструктор в Engine, это заставляет все подклассы явно вызывать этот конструктор и, следовательно, указывать тип двигателя, который заменяет ваши методы getVar.
Если вы действительно хотите иметь отдельный класс для вашего автомобиля с PetrolEngineТогда вы можете сделать это:
public class MyCar extends Car {
public MyCar() {
super(new PetrolEngine());
}
}