Вам необходимо переопределить ваш метод перемещения в дочернем классе.Сделайте ваш метод перемещения абстрактным в родительском классе.
Один из способов, по которому я могу поспорить об этом, - позволить классу Vehicle иметь много дочерних классов, в этом случае вы не сможете написать свой метод перемещения вКласс транспортного средства, поскольку вы не могли знать, какой пробег подкласса использовать.
Так вот исправленный код.
public abstract class Vehicle {
private int gasTank;
private int milesDriven;
void Vehicle(int gas, int milesDriven) {
gasTank = gas;
this.milesDriven = milesDriven;
}
// make this function abstract
abstract void move(int miles);
}
public class Hyundai Sonata extends Vehicle {
private int mileage;
void Hyundai Sonata () { super(40, 5000); }
void getMileage() {return mileage;}
//override it here
@Override
public void move(int miles){
gasTank -=this.getMileage() * miles;
milesDriven += miles;
}
}
Изменить 1: -
Как указаноу вас в комментарии есть способ решить эту проблему.
Сделать переменную пробега сущностью класса транспортного средства.
Таким образом, ваш класс транспортного средства будет выглядеть как
public abstract class Vehicle {
private int gasTank;
private int milesDriven;
private int mileage;
void Vehicle(int gas, int milesDriven,int mileage) {
gasTank = gas;
this.milesDriven = milesDriven;
this.mileage=mileage;
}
public void move(int miles){
gasTank -=mileage * miles;
milesDriven += miles;
}
}
И ваш подкласс будет выглядеть так.
public class Hyundai Sonata extends Vehicle {
private int mileage;
void Hyundai Sonata () { super(40, 5000,mileage); }
}
}