AY 22-23 Final Exam - Question A2(UML → 程式碼)

題目說明

這題為 UML 轉程式碼題,包含一個介面與三個類別(其中 Member 為抽象類別)。請依照 UML 提供的欄位與方法簽章撰寫對應程式碼或回答相關問題。


UML 類別圖

UML 類別圖

題目(Questions)

  1. (a) Write the interface Upgradeable. [2 marks]
  2. (b) Write the abstract class Member. [3 marks]
  3. (c) Write the class header of BasicMember. [3 marks]
  4. (d) Which FOUR methods MUST be implemented in the BasicMember class? [2 marks]

教授的破題提示


參考答案與批改

(a) Interface Upgradeable

public interface Upgradeable {
    public void upgrade();
}

(2/2)正確:介面使用 interface,方法預設為抽象,寫成 public void upgrade(); 即可。

(b) Abstract class Member

public abstract class Member {
    private String memberId;
    private double balance;

    public abstract void topup(double amt);
}

(1.5/3)重點:Member 與 topup 為斜體,代表 topup 必須宣告為抽象方法(無大括號,結尾以分號)。

(c) Class header of BasicMember

public class BasicMember extends Member implements Upgradeable

(3/3)完美:當同時繼承與實作時,extends 必須放在 implements 之前。

(d) FOUR methods that MUST be implemented in BasicMember

必須實作的四個方法:

upgrade()
topup(double amt)
getTotalExpense()
expend(double amt)

(2/2)來源說明:upgrade() 來自介面;topup() 來自父類別的抽象方法;另外兩個是 BasicMember 自己宣告的具體方法,子類別必須提供實作。


補充教學:為何 public abstract void topup(double amt); 不需要大括號?

因為它是 抽象方法(abstract method)。抽象方法只宣告方法簽章(signature),不包含任何實作細節;大括號 { } 用來包實作內容,既然抽象方法沒有實作,就不能寫大括號,而以分號結尾。

實作責任交給直接子類別:繼承該抽象類別的具體子類別必須提供該抽象方法的實作,否則該子類別也必須被宣告為抽象。


教授的總結與評語