我试图掌握继承权。我有一个类结构,包括一个接口(飞机),一个抽象类(飞机实现),它实现了与两个类一致的方法,以及两个子类:一架客机和一架大型喷气机。
乘客和大型喷气式客机各自具有不同的燃料容量,因此包含以下字段:private static final int MAX_FUEL_CAPACITY = 49;
我写了一个方法addFuel,它强制执行某些限制:
我最初在每节课都有以下内容,但认为这是不好的练习,因为有很多重复:
Integer addFuel(int litres) {
if (litres < 1) {
throw IndexOutOfBoundsException("entered fuel volume must be greater than zero. Zero litres entered.")
}
if (fuelInLitres == MAX_TANK_CAPACITY) {
throw IndexOutOfBoundsException("tank is at full capacity. Zero litres entered.")
}
if (litres + fuelInLitres > MAX_TANK_CAPACITY) {
throw IndexOutOfBoundsException("entered fuel volume is too large - tank does not have sufficient capacity. Zero litres entered.")
}
fuelInLitres += litres;
}
所以我在抽象类中结束了以下内容:
Integer addFuel(int litres) {
if (litres < 1) {
throw IndexOutOfBoundsException("entered fuel volume must be greater than zero. Zero litres entered.")
}
}
这在每个子类中都有,但是我也看不出它是对的吗?
Integer addFuel(int litres) {
super.addFuel(litres)
if (fuelInLitres == MAX_TANK_CAPACITY) {
throw IndexOutOfBoundsException("tank is at full capacity. Zero litres entered.")
}
if (litres + fuelInLitres > MAX_TANK_CAPACITY) {
throw IndexOutOfBoundsException("entered fuel volume is too large - tank does not have sufficient capacity. Zero litres entered.")
}
fuelInLitres += litres;
}
答案 0 :(得分:2)
您应该在基类中添加getMaxFuelCapacity()方法,并在两个子类中为它提供两种不同的实现。然后,您就可以将addFuel()中的所有剩余逻辑移动到基类。
答案 1 :(得分:1)
在您的抽象类中保留addFuel()
方法,
在Abstract Class中创建一个额外的抽象方法
public int getMaxFuelCapacity();// Call to this when you need MaxFuelCapacity
在子类中提供此方法的必需实现
在addFuel方法中调用getMaxFuelCapacity()
Integer addFuel(int litres) {
int maxCapacity=getMaxFuelCapacity();
// Do whatever you want to do
}
答案 2 :(得分:0)
您应该在基类Integer addFuel(int litres, int MaxCapacity)
中添加一个方法,并将整个逻辑从子类移动到基类的addFuel(int litres, int MaxCapacity)
方法,并在子类中添加新方法示例
getMaxFuel(int litres){
addFuel(litres, MaxCapcity)
}