這題為 UML 轉程式碼題,包含一個介面與三個類別(其中 Member 為抽象類別)。請依照 UML 提供的欄位與方法簽章撰寫對應程式碼或回答相關問題。
Upgradeable. [2 marks]Member. [3 marks]BasicMember. [3 marks]BasicMember class? [2 marks]public,- 表示 private。extends 在前,implements 在後。public interface Upgradeable {
public void upgrade();
}
(2/2)正確:介面使用 interface,方法預設為抽象,寫成 public void upgrade(); 即可。
public abstract class Member {
private String memberId;
private double balance;
public abstract void topup(double amt);
}
(1.5/3)重點:Member 與 topup 為斜體,代表 topup 必須宣告為抽象方法(無大括號,結尾以分號)。
public class BasicMember extends Member implements Upgradeable
(3/3)完美:當同時繼承與實作時,extends 必須放在 implements 之前。
必須實作的四個方法:
upgrade()
topup(double amt)
getTotalExpense()
expend(double amt)
(2/2)來源說明:upgrade() 來自介面;topup() 來自父類別的抽象方法;另外兩個是 BasicMember 自己宣告的具體方法,子類別必須提供實作。
public abstract void topup(double amt); 不需要大括號?因為它是 抽象方法(abstract method)。抽象方法只宣告方法簽章(signature),不包含任何實作細節;大括號 { } 用來包實作內容,既然抽象方法沒有實作,就不能寫大括號,而以分號結尾。
實作責任交給直接子類別:繼承該抽象類別的具體子類別必須提供該抽象方法的實作,否則該子類別也必須被宣告為抽象。