Given:



class FuelNotAvailException extends Exception {
}

class Vehicle {

    void ride() throws FuelNotAvailException { //line n1
        System.out.println("Happy Journey!");
    }
}

class SolarVehicle extends Vehicle {

    public void ride() throws Exception { //line n2
        super.ride();
    }
}

and the code fragment:

public static void main(String[] args) throws FuelNotAvailException, Exception {
    Vehicle v = new SolarVehicle();
    v.ride();
}

Which modification enables the code fragment to print Happy Journey!?

A. Replace line n1 with public void ride() throws FuelNotAvailException {
B. Replace line n1 with protected void ride() throws Exception {
C. Replace line n2 with void ride() throws Exception {
D. Replace line n2 with private void ride() throws FuelNotAvailException {

題解

FuelNotAvailException繼承Exception,屬於checked exception。

題目原先的程式會在line n2編譯失敗,因為SolarVehicle的ride方法覆寫了Vehicle的ride方法,Vehicle的ride方法會拋出FuelNotAvailException,所以SolarVehicle的ride方法只能不拋出例外、拋出unhecked exception或是拋出FuelNotAvailException或其子例外。

選項A,對編譯問題沒有幫助。

選項B,正確。

選項C,對編譯問題沒有幫助。

選項D,可見度需要大於等於default,使用private會編譯錯誤。