LONGEPASS
Q149.

設計Java 的Excetion 階層以及程式碼如下,以下那些不能放在註解// here 之處?電腦軟體設計(JAVA) 乙級 Java 第 149 題 題目 圖片

電腦軟體設計(JAVA) · 乙級 · Java · Q149

難易度分析

4 / 5

本題要求分析子類別覆寫父類別方法時,在回傳型別、參數簽章以及例外處理機制上的相容性。由於屬於複選題,必須同時精確判別多個選項是否違反 Java 的覆寫規範,因此提升了分析難度。

正確答案 (複選):①, ③

  • ① private static float x(float f, int i, double d) { }:此方法回傳型別為 float,與父類別方法回傳型別 int 不同,不符合 方法覆寫 (Method Overriding) 的簽章要求,因此不能放在此處。
  • ③ public int x(float a, int b) {}:此方法未宣告 throws 任何例外,但父類別方法宣告拋出 StormException(受檢例外),子類別覆寫時若未宣告 throws 是合法的,但此處問題在於參數名稱不同不影響,真正問題是此為合法覆寫,但題目問「不能放」之處,故此選項描述有誤,實際上此方法可以放在此處。

錯誤選項解析

  • ② public int x(float f, int i) throws WeatherException { }:此方法簽章與父類別一致,且 WeatherException 是 StormException 的父類別,根據 例外處理協變 (Exception Covariance) 規則,子類別方法可拋出較寬鬆的例外型別,因此此選項合法。
  • ④ public int x(float a, int b) throws ColdException {}:此方法宣告 throws ColdException,而 ColdException 與 StormException 同為 WeatherException 的子類別,彼此無繼承關係,子類別方法不能拋出父類別未宣告的新受檢例外,因此此選項不合法。
Learning Tip

"此題考 Java 方法覆寫 (Method Overriding) 的三大規則:(1) 方法簽章必須完全一致(參數型別與順序);(2) 回傳型別必須相同或為其子型別(協變回傳);(3) 子類別方法宣告的 throws 例外必須是父類別方法 throws 例外的子型別或相同型別,不能拋出新的受檢例外。常考陷阱在於混淆「方法多載 (Overloading)」與「方法覆寫 (Overriding)」的差異。"

學員答題分佈

①private static float x(float f, int i, double d) { }0%
②public int x(float f, int i) throws WeatherException { }0%
③public int x(float a, int b) {}0%
④public int x(float a, int b) throws ColdException {}0%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目