面向?qū)ο蟀咐C合案例
ATM機(jī)的模擬程序
package Day12_09_01;
/**
* 銀行賬戶
* @author YY
*
*/
public class Account
{
private String id;
private String password;
private double balance;//余額
public Account(String id,String password,double balance)
{
this.id=id;
this.password=password;//初始密碼
this.balance=balance;
}
public double getBalance()
{
return balance;
}
public String getId()
{
return id;
}
public void setPassword(String password)
{
this.password = password;
}
/**
* 驗(yàn)證密碼
* @param password 傳進(jìn)來的密碼
* @return 密碼匹配返回ture允坚,否則返回false
*/
public boolean isValid(String password)
{
return this.password.equals(password);
}
/**
* 存錢
* @param money 存入的金額
*/
public void deposit(double money)
{
balance+=money;
}
/**
* 取錢
* @param money 取多少錢
* @return 成功返回true定续,否則返回false
*/
public boolean withdraw(double money)
{
if(money<=balance)
{
balance-=money;
return true;
}
return false;
}
}```
package Day12_09_01;
public class ATM
{
private Account currentAccount;// 當(dāng)前銀行賬戶
// 用一個(gè)數(shù)組模擬數(shù)據(jù)庫系統(tǒng),預(yù)先保存若干個(gè)賬戶
private Account[] accountsArray =
{ new Account("11223344", "123123", 1200), new Account("22334455", "123456", 50),
new Account("33445566", "888888", 9999999) };
/**
* 讀卡
*
* @param id
* 銀行賬戶id
*/
public boolean readCard(String id)// 讀卡
{
for (Account account : accountsArray)
{
if (account.getId().equals(id))
{
currentAccount = account;
return true;
}
}
return false;
}
/**
* 驗(yàn)證密碼
*
* @param password
* @return
*/
public boolean verify(String password)// 驗(yàn)證身份
{
return currentAccount.isValid(password);
}
/**
* 顯示當(dāng)前余額
*
* @return
*/
public double showBalance()
{
return currentAccount.getBalance();
}
/**
* 存錢
*
* @param money
*/
public void deposit(int money)
{
currentAccount.deposit(money);
}
/**
* 取錢
*
* @param money
* @return
*/
public boolean withdraw(int money)
{
return currentAccount.withdraw(money);
}
/**
* 修改密碼
*
* @param newPassword
*/
public void changePassword(String newPassword)
{
currentAccount.setPassword(newPassword);
}
/**
* 轉(zhuǎn)賬
*
* @param otherId
* @param money
*/
public boolean transfer(String otherId, double money)// 轉(zhuǎn)賬
{
for (Account account : accountsArray)
{
if (account.getId().equals(otherId))
{
Account otherAccount = account;
if (currentAccount.getBalance() >= money)
{
currentAccount.withdraw(money);
otherAccount.deposit(money);
return true;
} else
{
return false;
}
}
}
return false;
}
/**
* 退卡
*/
public void quitCard()
{
currentAccount = null;
}
}
- 花括號(hào)表示一個(gè)作用域,在某個(gè)花括號(hào)定義的變量只在此作用域生效
package Day12_09_01;
import java.util.Scanner;
public class ATMTest
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
ATM atm = new ATM();
boolean isRunning = true;
while (isRunning)
{
System.out.println("歡迎使用賤人銀行ATM雞");
System.out.println("請插入銀行卡");
String id = input.next();
atm.readCard(id);
if (atm.readCard(id))
{
int counter = 0;
boolean isCorrect = false;
do
{
counter++;
System.out.println("請輸入密碼:");
String password = input.next();
isCorrect = atm.verify(password);
} while (counter < 3 && !isCorrect);
if (isCorrect)
{
boolean flag = true;
while (flag)
{
System.out.println("1.查詢余額:");
System.out.println("2.存款:");
System.out.println("3.取款:");
System.out.println("4.轉(zhuǎn)賬:");
System.out.println("5.修改密碼:");
System.out.println("6.退卡:");
int choice;
do
{
System.out.println("請選擇:");
choice = input.nextInt();
} while (choice < 1 || choice > 6);
switch (choice)
{
case 1:
System.out.println("賬戶余額為:" + atm.showBalance());
break;
// 花括號(hào)表示一個(gè)作用域,在某個(gè)花括號(hào)定義的變量只在此作用域生效
case 2:
{
System.out.println("請放入鈔票:");
int money = input.nextInt();
atm.deposit(money);
System.out.println("存款成功!");
break;
}
case 3:
{
System.out.println("請輸入取款金額:");
int money = input.nextInt();
if (atm.withdraw(money))
{
System.out.println("請取走你的鈔票!");
} else
{
System.out.println("余額不足日裙!");
}
}
break;
case 4:
System.out.println("請輸入轉(zhuǎn)入賬號(hào):");
String otherId = input.next();
System.out.println("請輸入轉(zhuǎn)入金額:");
double money = input.nextDouble();
if (atm.transfer(otherId, money))
{
System.out.println("轉(zhuǎn)賬成功!");
} else
{
System.out.println("轉(zhuǎn)賬失敗~");
}
break;
case 5:
System.out.println("請輸入新密碼:");
String newpassword = input.next();
System.out.println("請?jiān)俅屋斎耄?);
String repwd = input.next();
if (newpassword.equals(repwd))
{
atm.changePassword(newpassword);
System.out.println("密碼已修改惰蜜!");
} else
{
System.out.println("兩次輸入不一致昂拂!");
}
break;
case 6:
System.out.println("請取走你的卡片!");
flag = false;
break;
}
}
} else
{
System.out.println("已吞卡");
}
}
}
input.close();
}
}
#繼承的相關(guān)概念
###繼承的特性
- 子類擁有父類非private的屬性抛猖,方法和構(gòu)造器格侯。
- 子類可以擁有自己的屬性和方法,即子類可以對父類進(jìn)行擴(kuò)展财著。
- 子類可以用自己的方式實(shí)現(xiàn)父類的方法养交。
- Java的繼承是單繼承,但是可以多重繼承瓢宦,單繼承就是一個(gè)子類只能繼承一個(gè)父類,多重繼承就是灰羽,例如A類繼承B類驮履,B類繼承C類鱼辙,所以按照關(guān)系就是C類是B類的父類,B類是A類的父類玫镐,這是java繼承區(qū)別于C++繼承的一個(gè)特性倒戏。
- 提高了類之間的耦合性(繼承的缺點(diǎn),耦合度高就會(huì)造成代碼之間的聯(lián)系)恐似。
###特別注意
- 子類不能繼承父類的構(gòu)造器(構(gòu)造方法或者構(gòu)造函數(shù))杜跷,但是父類的構(gòu)造器帶有參數(shù)的,則必須在子類的構(gòu)造器中顯式地通過super關(guān)鍵字調(diào)用父類的構(gòu)造器并配以適當(dāng)?shù)漠?dāng)屬列表矫夷。
- 如果父類有無參構(gòu)造器葛闷,則在子類的構(gòu)造器中用super調(diào)用父類構(gòu)造器不是必須的,如果沒有使用super關(guān)鍵字双藕,系統(tǒng)會(huì)自動(dòng)調(diào)用父類的無參構(gòu)造器淑趾。