Serie: Angelia
java
38 líneas
· Actualizado 2026-09-27
LoggingSavingsAccount.java
Angelia/Java/Week_6_7/code/03_inheritance_lsp/LoggingSavingsAccount.java
import java.util.ArrayList;
import java.util.List;
/**
* 會記錄操作的儲蓄帳戶:覆寫 withdraw,但把「真正的提款邏輯」交給 super.withdraw。
*
* 這是「擴充而非取代」父類別行為的典型寫法。
* 它完全遵守 SavingsAccount 的契約(結果一模一樣,只是多記一筆 log),
* 所以是 LSP 合規的子型別。
*
* final:宣告這個類別不能再被繼承。
*/
public final class LoggingSavingsAccount extends SavingsAccount {
private final List<String> log = new ArrayList<>();
@Override
public boolean withdraw(int amount) {
boolean ok = super.withdraw(amount); // 先做父類別的事
if (ok) {
this.log.add("withdraw " + amount); // 再加上自己的事
} else {
this.log.add("withdraw " + amount + " FAILED");
}
return ok;
}
@Override
public void deposit(int amount) {
super.deposit(amount);
this.log.add("deposit " + amount);
}
/** 回傳「防禦性複製」:外界拿到的是副本,改不到我們內部的 log。 */
public List<String> getLog() {
return new ArrayList<>(this.log);
}
}
Artículos relacionados
Angelia
haskell
EN
Actualizado 2026-02-03
Adding.hs
Adding.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Adding.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
Area.hs
Area.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Area.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
Chess.hs
Chess.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Chess.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
ChessGraphics.hs
ChessGraphics.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/ChessGraphics.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
Examples.hs
Examples.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Examples.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
Fibonacci.hs
Fibonacci.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Fibonacci.hs).
Leer artículo →