package bank2;
public class ATM extends Thread {
DemandDepositAccount account;
int money;
public ATM(DemandDepositAccount account, int money){
this.account = account;
this.money = money;
}
public void run(){
try {
account.deposit(money);
} catch (AccountException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
檔案:Account.java
package bank2;
public abstract class Account {
int balance;
Account(int money) {
balance = money;
}
public abstract int inquiry();
}
檔案:AccountException.java
package bank2;
public class AccountException extends Exception {
public String getMessage() // 覆寫 Throwable 的 toString()
{
return "金額不可以為負數";
}
public void showMessage() { // 自定方法
System.out.println("例外發生:請從新輸入金額");
}
}
檔案:DemandDepositAccount.java
package bank2;
public class DemandDepositAccount extends Account {
DemandDepositAccount(int money){
super(money);
}
public synchronized void deposit(int money) throws AccountException {
if (money < 0) {
throw new AccountException();
}
else {
balance += money;
System.out.println("money: " +balance);
}
}
public void withdraw(int money) throws AccountException{
if (money < 0)
throw new AccountException();
else
balance -= money;
}
public int inquiry() {
return balance;
}
}
檔案:FixedDepositAccount.java
package bank2;
public class FixedDepositAccount extends Account {
FixedDepositAccount(int money) {
super(money);
try{
if (money < 50000)
throw new ArithmeticException("例外狀況:定期存款最少需 50,000 元");
}catch(Exception e){
System.out.println(e.toString());
}
}
public FixedDepositAccount() {
// TODO Auto-generated constructor stub
super(50000);
}
@Override
public int inquiry() {
// TODO Auto-generated method stub
(new FixedDepositAccount() {
public void showMe(){
System.out.println("本銀行定額存款10萬以上,另有優惠,請多加利用");
}
}).showMe();
return balance;
}
}
檔案:AccountTest.java
package bank2;
public class AccountTest {
public static void main(String[] args) {
DemandDepositAccount account1 = new DemandDepositAccount(1000);
ATM A1 = new ATM(account1, 500);
ATM A2 = new ATM(account1, 1000);
ATM A3 = new ATM(account1, 2000);
A1.start();
A2.start();
A3.start();
}
}
執行結果
若 deposit ()這方法不用 synchronized 這修飾字時,會有不正常的顯示


沒有留言:
張貼留言