Q72.
以下Java 程式執行完後,輸出結果為何?
電腦軟體設計(JAVA) · 乙級 · Java · Q72
難易度分析
3 / 5
本題要求分析類別繼承中的建構子呼叫規則,需區分編譯階段與執行階段的錯誤差異,並能從多個容易混淆的物件導向概念(如多型、抽象類別限制)中精確找出導致編譯失敗的結構性原因。
正確答案:④無法編譯,因為Rectangle 類別沒有預設建構子
④ 無法編譯,因為Rectangle 類別沒有預設建構子:當父類別 Shapes 定義了有參數建構子且未提供無參數預設建構子時,子類別 Rectangle 必須明確呼叫 `super()` 並傳入參數,否則會因找不到預設建構子而編譯失敗。
錯誤選項解析
- ① 無法編譯,因為Shapes 物件不是Rectangle 類別:Shapes 物件實際上是 Rectangle 的父類別參考,在 Java 中允許使用父類別型態指向子類別物件(向上轉型),此選項對多型概念理解有誤。
- ② 0.0:輸出 0.0 表示程式可正常執行,但此題關鍵在於編譯階段即會失敗,不會到達執行階段,因此不會產生任何數值輸出。
- ③ 無法編譯,因為Shapes 類別設定為abstract 而無法產生Rectangle 物件:abstract 類別確實無法直接實體化,但可透過其子類別(如 Rectangle)進行實體化,此為抽象類別的正常使用方式,並非編譯錯誤原因。
Learning Tip
"此題核心考點為 Java 繼承機制中的建構子呼叫規則。當父類別沒有無參數預設建構子時,子類別必須在自身建構子第一行使用 `super(參數)` 明確呼叫父類別建構子。常見陷阱是混淆「抽象類別無法實體化」與「缺少預設建構子」兩種不同的編譯錯誤情境。實務開發中,建議一律為父類別提供無參數建構子或使用 `protected` 修飾子以避免此類問題。"
學員答題分佈
①無法編譯,因為Shapes 物件不是Rectangle 類別0%
②0.00%
③無法編譯,因為Shapes 類別設定為abstract 而無法產生Rectangle 物件0%
④無法編譯,因為Rectangle 類別沒有預設建構子0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!