司法三等申論題
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 小題
小題 (二)
請註明程式碼行號,那些程式段落使用到多載(Overloading)、覆寫(Overriding)與多型(Polymorphism)功能?(18 分)
思路引導 VIP
看到此題,應立即將物件導向的三大名詞與給定程式碼進行『特徵比對』。先尋找同名但參數不同的函式(多載),再尋找繼承關係中同名且特徵相同的函式(覆寫),最後思考這兩者如何對應到編譯期多型與執行期多型。特別注意,若程式碼中沒有該機制(如覆寫),需明確指出這是考題陷阱,並展現編譯器繫結(Binding)的底層概念。
小題 (一)
其執行後的輸出為何?(7 分)
思路引導 VIP
看到這題應立刻聯想到「方法多載 (Method Overloading)」,需根據呼叫時傳入引數的「數量」與「資料型別」來對應正確的方法簽名。接著需特別注意浮點數向下強制轉型 (Type Casting) 為整數時的語義(無條件捨去小數),即可準確算出結果。