使用继承创建一个父类Account,该父类具有两个名为SavingsAccount 和 CheckingAccount的子类。
在Account类中使用参数化构造方法初始化两个属性:name(姓名)和balance(余额)。声明方法以返回这些属性中存储的值。属性balance应该根据发生的交易而更新。SavingsAccount类应该具有附加属性 interestRate(利率)和参数化构造方法以初始化这些属性。
CheckingAccount类具有附加属性 overDraft(可透支金额)。该类应该具有两个参数化构造方法,一个用于接受两个参数(以初始化父类的name和balance属性),另一个用于接受3个参数以初始化所有3个成员。提款时应该执行下列检查:
1.如果要提取的amount小于balance,那么交易继续进行。
2.如果amount大于balance且大于balance和overDraft金额的和,那么交易应该被取消。
3.如果amount大于balance且小于balance和overDraft金额的和,那么balance的值应该变为0,overDraft金额的值应该足以支付balance和amount之间的差。
题目要求是:编写测试类,显示用户John,初始余额为500.0,利率为0.04,存款200.0,取款200.0的过程的相关信息。
现实用户Stephen,初始余额为200.0,存款200.0可用透支金额为300.0,取款500.0的过程的相关信息。要求得出的结果如下:
储蓄帐户详细信息:
-----------------------
John初始余额为:500.0
存款:200.0
取款:200.0
John交易后的余额为:500.0支票帐户详细信息:
------------------------
Stephen初始余额为:200.0
存款:200.0
可透支金额:300.0
取款:500.0
Stephen交易后的余额为:0.0各位帮忙解决一下。我自己也做了一个代码,勉强实现了这个功能,但是觉得写的很不好。希望大家交流一下
在Account类中使用参数化构造方法初始化两个属性:name(姓名)和balance(余额)。声明方法以返回这些属性中存储的值。属性balance应该根据发生的交易而更新。SavingsAccount类应该具有附加属性 interestRate(利率)和参数化构造方法以初始化这些属性。
CheckingAccount类具有附加属性 overDraft(可透支金额)。该类应该具有两个参数化构造方法,一个用于接受两个参数(以初始化父类的name和balance属性),另一个用于接受3个参数以初始化所有3个成员。提款时应该执行下列检查:
1.如果要提取的amount小于balance,那么交易继续进行。
2.如果amount大于balance且大于balance和overDraft金额的和,那么交易应该被取消。
3.如果amount大于balance且小于balance和overDraft金额的和,那么balance的值应该变为0,overDraft金额的值应该足以支付balance和amount之间的差。
题目要求是:编写测试类,显示用户John,初始余额为500.0,利率为0.04,存款200.0,取款200.0的过程的相关信息。
现实用户Stephen,初始余额为200.0,存款200.0可用透支金额为300.0,取款500.0的过程的相关信息。要求得出的结果如下:
储蓄帐户详细信息:
-----------------------
John初始余额为:500.0
存款:200.0
取款:200.0
John交易后的余额为:500.0支票帐户详细信息:
------------------------
Stephen初始余额为:200.0
存款:200.0
可透支金额:300.0
取款:500.0
Stephen交易后的余额为:0.0各位帮忙解决一下。我自己也做了一个代码,勉强实现了这个功能,但是觉得写的很不好。希望大家交流一下
大家帮忙看一下吧/*
两个对象: John,Stephen。
John的属性:name,balance,amount,interestRate
Stephen的属性:name,balance,amount,overDraft,interestRate两个动作:
1.存钱
2.取钱
*/
abstract class Account
{
String name;//姓名
float balance;//余额
float amountout;//取出的钱数
float amountin;//存进的钱数
//构造方法
Account()
{}
//构造方法重载,传4个参数
Account(String name1,float balance1,float amountin1,float amountout1)
{
name = name1;
balance = balance1;
amountin = amountin1;
amountout = amountout1;
}
//我并不满意的一个 abstract 方法
abstract void atm();
}/*
SavingsAccount类
*/
class SavingsAccount extends Account
{
float interestRate = 0.04f;//附加属性
SavingsAccount()
{}
//构造方法重载
SavingsAccount(String name , float balance ,float amountin1,float amountout1)
{
super(name,balance,amountin1,amountout1);
}
//子类重写atm()方法
void atm()
{
System.out.println("储蓄帐户详细信息:");
System.out.println(name+"'s premier balance is:"+balance);
System.out.println("saveing is "+amountin);
System.out.println("take out "+amountout);
balance = balance + amountin-amountout;
System.out.println(name+"'s balance is: "+balance);
}
}
/*
CheckingAccount类
*/
class CheckingAccount extends Account
{
float overDraft;//附加属性
CheckingAccount()
{}
//构造方法重载,传5个参数。参数太多,我不满意的地方。
CheckingAccount(String name ,float balance,float amountin1,float amountout1,float overDraft2)
{
super(name,balance,amountin1,amountout1);
overDraft = overDraft2;
}
//重写atm()方法
void atm()
{
System.out.println("credit account's details");
System.out.println(name+"'s premier balance is:"+balance);
System.out.println("the saveing is :"+amountin);
System.out.println("overDaft is "+overDraft);
balance = balance +amountin;
if (amountout < balance)
{
balance -=amountout;
System.out.println("交易余额为:"+balance);
}
else if(amountout>balance&&amountout>(overDraft+balance))
{
System.out.println("您资金不够无法完成交易");
}
else
{
System.out.println("当前透支金额为:"+(amountout-balance));
balance = 0;
System.out.println(name+"'s balance is "+balance);
}
}
}//测试类
class AccountTest
{
AccountTest()
{}
public static void main(String[] args)
{
SavingsAccount sa = new SavingsAccount("John",500,200,200);
sa.atm();
System.out.println("**********************************");
CheckingAccount ca = new CheckingAccount("Stephen",200,200,500,300);
ca.atm();
}
}
2 如果你讨厌那么长的构造器参数,你可以
SavingsAccount o = new SavingsAccount();
o.setName(name);
o.setBalance(balance);这样更常见,但有风险,你可能忘了初始化某个必要的参数,而构造器则不会。
Account 2个属性name,balance
两个动作:
1.存钱
2.取钱
*/
abstract class Account
{
String name;//姓名
float balance;//余额
//构造方法
Account()
{}
//构造方法重载,传2个参数
Account(String name1,float balance1)
{
name = name1;
balance = balance1;
}
abstract void atm(float amountin,float amountout);
}/*
SavingsAccount类
处理储蓄帐户
*/
class SavingsAccount extends Account
{
float interestRate = 0.04f;//附加属性 利率
SavingsAccount()
{}
//构造方法重载
SavingsAccount(String name , float balance)
{
super(name,balance);
}
//子类重写atm()方法
void atm(float amountin,float amountout)
{
System.out.println("储蓄帐户详细信息:");
System.out.println(name+"'s premier balance is:"+balance);
System.out.println("saveing is "+amountin);
System.out.println("take out "+amountout);
balance = balance + amountin-amountout;
System.out.println(name+"'s balance is: "+balance);
}
}
/*
CheckingAccount类
处理信用帐户
*/
class CheckingAccount extends Account
{
float overDraft;//附加属性
CheckingAccount()
{}
//构造方法重载,传3个参数
CheckingAccount(String name ,float balance,float overDraft2)
{
super(name,balance);
overDraft = overDraft2;
}
//重写atm()方法
void atm(float amountin,float amountout)
{
System.out.println("credit account's details");
System.out.println(name+"'s premier balance is:"+balance);
System.out.println("the saveing is :"+amountin);
System.out.println("overDaft is "+overDraft);
balance = balance +amountin;
if (amountout < balance)
{
balance -=amountout;
System.out.println("交易余额为:"+balance);
}
else if(amountout>balance&&amountout>(overDraft+balance))
{
System.out.println("您资金不够无法完成交易");
}
else
{
System.out.println("当前透支金额为:"+(amountout-balance));
balance = 0;
System.out.println(name+"'s balance is "+balance);
}
}
}//测试类
class AccountTest
{
AccountTest()
{}
public static void main(String[] args)
{
SavingsAccount sa = new SavingsAccount("John",500);
sa.atm(200,200);
System.out.println("**********************************");
CheckingAccount ca = new CheckingAccount("Stephen",200,300);
ca.atm(200,500);
}
}