S SmartDocs
系列: Angelia java 18 行 · 更新于 2026-09-27

OverdraftSavingsAccount.java

Angelia/Java/Week_6_7/code/03_inheritance_lsp/OverdraftSavingsAccount.java

/**
 * 可透支的帳戶:withdraw 永遠成功,餘額可能變成負數。
 *
 * ★ 這個類別「違反 LSP」:
 *   SavingsAccount 的契約說「餘額 >= 0」且「餘額不足時回傳 false」,
 *   但這裡打破了不變量(餘額可負)也違反了後置條件(永遠 true)。
 *   任何以 SavingsAccount 為前提寫的程式,拿到它就可能出錯——即使編譯器完全不會抱怨。
 *
 * 教材保留它,是為了讓你親眼看到 LSP 被違反的後果(見 Main.java)。
 */
public class OverdraftSavingsAccount extends SavingsAccount {

    @Override
    public boolean withdraw(int amount) {
        this.balance = this.balance - amount;   // 不檢查餘額
        return true;                            // 永遠宣稱成功
    }
}

相关文章