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方法只能不拋出例外、拋出unchecked exception或是拋出FuelNotAvailException或其子例外。
選項A,對編譯問題沒有幫助。
選項B,正確。
選項C,對編譯問題沒有幫助。
選項D,可見度需要大於等於default,使用private會編譯錯誤。