面向对象案例综合案例
ATM机的模拟程序
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;
}
/**
* 验证密码
* @param password 传进来的密码
* @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;// 当前银行账户
// 用一个数组模拟数据库系统,预先保存若干个账户
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;
}
/**
* 验证密码
*
* @param password
* @return
*/
public boolean verify(String password)// 验证身份
{
return currentAccount.isValid(password);
}
/**
* 显示当前余额
*
* @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);
}
/**
* 转账
*
* @param otherId
* @param money
*/
public boolean transfer(String otherId, double money)// 转账
{
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;
}
}
- 花括号表示一个作用域,在某个花括号定义的变量只在此作用域生效
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.转账:");
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;
// 花括号表示一个作用域,在某个花括号定义的变量只在此作用域生效
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("请输入转入账号:");
String otherId = input.next();
System.out.println("请输入转入金额:");
double money = input.nextDouble();
if (atm.transfer(otherId, money))
{
System.out.println("转账成功!");
} else
{
System.out.println("转账失败~");
}
break;
case 5:
System.out.println("请输入新密码:");
String newpassword = input.next();
System.out.println("请再次输入:");
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();
}
}
#继承的相关概念
###继承的特性
- 子类拥有父类非private的属性,方法和构造器。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。
- 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。
###特别注意
- 子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的当属列表。
- 如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。