民國115年 普通考試 資訊處理 程式設計概要

第1題

請完成如下Java 程式(class Circle: code 1 ~ code 3, class Rectangle code 4 ~ code 6, mai…

題目

請完成如下Java 程式(class Circle: code 1 ~ code 3, class Rectangle code 4 ~ code 6, main code 7 ~ code 8),可以印出如下最後一張圖的內容。(24 分) 第一/三個方框code 1/4 class Circle/Rectangle 宣告繼承父類別 第二個方框 code 2/3 實作Circle 計算面積、周長的方法 第四個方框 code 5/6 實作Rectangle 計算面積、周長的方法 第五個方框 code 7/8 多形方式宣告Circle/Rectangle 物件 程式輸出如下:

參考解答(AI 生成,非官方)

  • 一、整體設計理念:本題考「抽象父類別+多形」。應先宣告 abstract class Shape,內含抽象方法 public abstract double area(); 與 public abstract double perimeter();,作為 Circle 與 Rectangle 的共同父類別。父類別只定義介面而不實作,子類別以 extends 繼承後強制覆寫,這是 code 1 與 code 4 的關鍵。若改用 interface 亦可,但題目明示「宣告繼承父類別」,故以抽象類別作答較符題意。
  • 二、Circle 類別(code 1~3):欄位宣告 private double radius;建構子 public Circle(double r) 中指派 this.radius = r,可加負值檢查。覆寫 area() 回傳 Math.PI * radius * radius,覆寫 perimeter() 回傳 2 * Math.PI * radius。方法簽章須與父類別完全一致並加 @Override 註記,否則只是多載(overload)而非覆寫,多形將失效。
  • 三、Rectangle 類別(code 4~6):欄位 private double width, height;建構子初始化兩者。面積為 width * height,周長為 2 * (width + height)。與 Circle 相同,須以 @Override 覆寫父類別的兩個抽象方法,使父類別參考可指向此物件。
  • 四、main 方法(code 7~8):以父類別型別宣告、子類別實例建立,例如 Shape s1 = new Circle(半徑); Shape s2 = new Rectangle(長, 寬);,再分別呼叫 s1.area()、s1.perimeter()、s2.area()、s2.perimeter()。此時採動態繫結(dynamic binding),執行期依物件實際型別決定呼叫哪個實作,同一行 s.area() 會產生不同結果,即多形的具體展現。
  • 五、輸出與應考提醒:將題目最後一張圖所給的半徑、長寬數值代入上列公式,並以 System.out.printf("%.2f%n", 值) 控制小數位,即可印出與圖一致的內容。若陣列宣告為 Shape[] shapes = {s1, s2}; 再以 for 迴圈走訪,更能突顯多形價值。切記父類別不可為 final、方法不可為 static,否則無法覆寫。

AI 依官方試題文字產生的參考解答,非考選部公告答案,內容僅供備考參考。

官方資料