下面的代碼不會因爲未處理的異常的編譯,但它似乎對我來說,應該沒有問題:爲什麼這被認爲是一個未處理的異常?
class Car {
public void drive() throws Exception {
System.out.println("Driving...");
}
}
public class Sedan extends Car {
public void drive() {
System.out.println("Driving Sedan...");
}
public static void main(String[] args) {
Car c = new Sedan();
c.drive(); //unhandled exception!
}
}
它不應該是明顯的編譯器,當覆蓋方法c.drive()
是稱爲,檢查異常不會被拋出?爲什麼僅僅因爲引用的類型是Car而不是Sedan類型,我們必須將驅動器視爲仍然拋出檢查的異常?首要的方法不是!
'drive'可以拋出'Exception'但'主要修復'不處理它。 – tkausl
,因爲'c'可能不是'Sedan',它可以拋出一個'Exception'。由於'throw'在'Car'中定義,所以您需要處理它。 – SomeJavaGuy
做'Sedan c = new Sedan();' –