LONGEPASS
Q148.

針對下列Java 語言程式,那些敘述錯誤?電腦軟體設計(JAVA) 乙級 Java 第 148 題 題目 第一張圖片 電腦軟體設計(JAVA) 乙級 Java 第 148 題 題目 第二張圖片

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

難易度分析

4 / 5

本題屬於複選題,要求考生在多個選項中辨識出不正確的敘述。考點涉及類別成員的存取權限以及編譯錯誤與執行期例外之間的差異,需要對 Java 的語法規範有精確的掌握才能正確排除干擾項。

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

  • ① 第三行 "private void x() {" 無法編譯:此敘述錯誤。在 Base 類別中宣告 private 方法 `x()` 是完全合法的 Java 語法,private 存取修飾子僅限制該方法只能在所屬類別內部被呼叫,不影響編譯。
  • ③ 第十四行"void x() {" 無法編譯:此敘述錯誤。第十四行 `void x()` 在 Sub 類別中使用預設存取範圍(package-private)宣告方法是合法的。雖然 Base 的 `x()` 是 private 無法被覆寫(@Override 會失敗),但 Sub 可以獨立宣告一個新的 `x()` 方法,這屬於方法遮蔽(hiding)而非覆寫,編譯可通過。
  • ④ 此程式會丟出一個 Exception:此敘述錯誤。此程式的問題在於編譯階段就會失敗(第十行 `b.x()` 存取 private 方法),根本不會進入執行階段,因此不可能丟出 Exception。編譯錯誤與執行期例外是兩個不同的錯誤層級。

錯誤選項解析

  • ② 第十行 "b.x();" 無法編譯:此敘述正確。第十行 `b.x()` 確實無法編譯,因為變數 `b` 的宣告型別為 Base,而 `x()` 在 Base 中是 private,外部類別(包含 main 方法所在位置)無法存取 private 成員,會產生編譯錯誤。
Learning Tip

"本題核心考點為 private 存取修飾子的可見範圍與編譯期錯誤 vs 執行期例外的區別。常考陷阱:(1) private 方法不能被子類別覆寫,子類別若宣告同名方法屬於全新方法而非 override;(2) 判斷「無法編譯」與「丟出 Exception」的差異——編譯錯誤在 `javac` 階段就會被攔截,不會產生 .class 檔,更不會執行到拋出例外的程式碼;(3) 注意變數的宣告型別決定可存取的成員範圍,而非實際物件型別。"

學員答題分佈

①第三行 "private void x() {" 無法編譯0%
②第十行 "b.x();" 無法編譯0%
③第十四行"void x() {" 無法編譯0%
④此程式會丟出一個 Exception0%

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

相似類型題目