司法三等申論題
108年
[檢察事務官電子資訊組] 程式語言
第 一 題
📖 題組:
請問下列 Java 程式碼: 1 class NumAdd { 2 public int add(int x, int y) { 3 return(x + y); 4 } 6 public int add(int x, int y, int z) { 7 return(x + y + z); 8 } 10 public int add(double x, int y) { 11 return((int) x + y); 12 } 14 public int add(int x, double y) { 15 return(x + (int)y); 16 } 17 } 18 19 public class Main { 20 public static void main(String[] args) { 21 NumAdd na = new NumAdd(); 22 System.out.println(na.add(1, 2)); 23 System.out.println(na.add(3, 4, 5)); 24 System.out.println(na.add(6.7, 8)); 25 System.out.println(na.add(9, 10.1)); 26 } 27 28 public Main() { 29 super(); 30 } 31 }
請問下列 Java 程式碼: 1 class NumAdd { 2 public int add(int x, int y) { 3 return(x + y); 4 } 6 public int add(int x, int y, int z) { 7 return(x + y + z); 8 } 10 public int add(double x, int y) { 11 return((int) x + y); 12 } 14 public int add(int x, double y) { 15 return(x + (int)y); 16 } 17 } 18 19 public class Main { 20 public static void main(String[] args) { 21 NumAdd na = new NumAdd(); 22 System.out.println(na.add(1, 2)); 23 System.out.println(na.add(3, 4, 5)); 24 System.out.println(na.add(6.7, 8)); 25 System.out.println(na.add(9, 10.1)); 26 } 27 28 public Main() { 29 super(); 30 } 31 }
📝 此題為申論題,共 2 小題
小題 (一)
其執行後的輸出為何?(7 分)
思路引導 VIP
看到這題應立刻聯想到「方法多載 (Method Overloading)」,需根據呼叫時傳入引數的「數量」與「資料型別」來對應正確的方法簽名。接著需特別注意浮點數向下強制轉型 (Type Casting) 為整數時的語義(無條件捨去小數),即可準確算出結果。
小題 (二)
請註明程式碼行號,那些程式段落使用到多載(Overloading)、覆寫(Overriding)與多型(Polymorphism)功能?(18 分)
思路引導 VIP
看到此題,應立即將物件導向的三大名詞與給定程式碼進行『特徵比對』。先尋找同名但參數不同的函式(多載),再尋找繼承關係中同名且特徵相同的函式(覆寫),最後思考這兩者如何對應到編譯期多型與執行期多型。特別注意,若程式碼中沒有該機制(如覆寫),需明確指出這是考題陷阱,並展現編譯器繫結(Binding)的底層概念。