java中方法的继承和覆盖

时间:2015-03-07 14:10:45

标签: java

我试图掌握继承权。我有一个类结构,包括一个接口(飞机),一个抽象类(飞机实现),它实现了与两个类一致的​​方法,以及两个子类:一架客机和一架大型喷气机。

乘客和大型喷气式客机各自具有不同的燃料容量,因此包含以下字段:

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; 
}

3 个答案:

答案 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)
 }