Добрый день! Суть задачи: есть три банковских счета, которые могут списавать свои деньги, добавлять туда деньги и переводить деньги друг другу с счета на счет. Единственное хитрое условие с кредитным аккаунтом: CreditAccount : он никак не может быть положительным. Проблема: Я не могу реализовать, что когда идет перевод денег с одного счета на кредитный CreditAccount , то должно быть возвращение денег freeMoney на счет который изначально переводил деньги.
То есть логика такая: 1600 рублей переводится со сберегательного счета SavingsAccount на кредитный счет CreditAccount → на кредитном счете CreditAccount в данный момент -100 рублей → кредитный счет CreditAccount добирает в себя +100 рублей и становится равным 0 → 1500 рублей возвращаются обратно в сберегательный счет SavingsAccount .
Я пытался этот остаток freeMoney вернуть как:
super.setAmount(super.getAmount()+freeMoney);
но понимаю, что это неправильно, т.к. это не суперкласс. А других идей нет. Подскажите\покажите как можно вернуть этот остаток?
Мой код ниже:
public class Main {
public static void main(String[] args) {
SavingsAccount savingsAccount = new SavingsAccount
(2600, "SavingsAcnt#1");
CheckingAccount checkingAccount = new CheckingAccount
(2900, "CheckingAcnt#1");
CreditAccount creditAccount = new CreditAccount
(0, "CreditAcnt#1");
savingsAccount.transfer(checkingAccount, 100);
savingsAccount.addMoney(50);
setApart();//***********************************
checkingAccount.transfer(creditAccount, 1300);
checkingAccount.pay(100);
checkingAccount.addMoney(250);
setApart();//*************************************
creditAccount.transfer(checkingAccount, 200);
creditAccount.pay(300);
creditAccount.addMoney(5150);
}
public static void setApart() {
for (int i = 0; i < 50; i++) {
System.out.print("*");
}
System.out.println();
}
}
public abstract class Account {
private int amount;
private String accountName;
public int getAmount() {
return amount;
}
public String getAccountName() {
return accountName;
}
public void setAmount(int amount) {
this.amount = amount;
}
public Account(int amount, String accountName) {
this.amount = amount;
this.accountName = accountName;
}
void pay(int amount) {
setAmount(getAmount() - amount);
}
void transfer(Account account, int amount) {
account.setAmount(account.getAmount() + amount);
this.setAmount(getAmount() - amount);
}
void addMoney(int amount) {
setAmount(getAmount() + amount);
}
}
public class CheckingAccount extends Account {
public CheckingAccount(int amount, String accountName) {
super(amount, accountName);
}
@Override
void pay(int amount) {
if ((getAmount() - amount) < 0) System.out.println("Not enough money");
else {
int thisTempAmount = getAmount();
setAmount(getAmount() - amount);
System.out.printf("%d $ marked off %s; %d $-> %d $ %n",
amount, getAccountName(), thisTempAmount, getAmount());
}
}
@Override
void transfer(Account account, int amount) {
if ((getAmount() - amount) < 0) System.out.println("Not enough money");
else {
int thisTempAmount = getAmount();
setAmount(getAmount() - amount);
System.out.printf("%d $ marked off %s; %d $-> %d $ %n",
amount, getAccountName(), thisTempAmount, getAmount());
account.addMoney(amount);
}
}
@Override
void addMoney(int amount) {
int thisTempAmount = getAmount();
setAmount(getAmount() + amount);
System.out.printf("%d $ settled an %s; %d $-> %d $ %n",
amount, getAccountName(), thisTempAmount, getAmount());
}
}
public class CreditAccount extends Account {
public CreditAccount(int amount, String accountName) {
super(amount, accountName);
}
@Override
void pay(int amount) {
int thisTempAmount = getAmount();
setAmount(getAmount() - amount);
System.out.printf("%d $ marked off %s; %d $-> %d $ %n",
amount, getAccountName(), thisTempAmount, getAmount());
}
@Override
void transfer(Account account, int amount) {
int thisTempAmount = getAmount();
setAmount(getAmount() - amount);
System.out.printf("%d $ marked off %s; %d $-> %d $ %n",
amount, getAccountName(), thisTempAmount, getAmount());
account.addMoney(amount);
}
@Override
void addMoney(int amount) {
if ((getAmount() + amount) > 0) {
int thisTempAmount = getAmount();
System.out.printf("%s's can't be positives%n",
getClass().getSimpleName());
int freeMoney = amount + getAmount();
setAmount(0);
System.out.printf("%d $ settled an %s; %d $-> %d $ %n" +
"%d $ for return%n",
-thisTempAmount, getAccountName(),
thisTempAmount, getAmount(), freeMoney);
// super.setAmount(super.getAmount()+freeMoney);
} else {
int thisTempAmount = getAmount();
setAmount(getAmount() + amount);
System.out.printf("%d $ settled an %s; %d $-> %d $ %n",
amount, getAccountName(), thisTempAmount, getAmount());
}
}
}
public class SavingsAccount extends Account {
public SavingsAccount(int amount, String accountName) {
super(amount, accountName);
}
@Override
void transfer(Account account, int amount) {
if ((getAmount() - amount) < 0) System.out.println("Not enough money");
else {
int thisTempAmount = getAmount();
setAmount(getAmount() - amount);
System.out.printf("%d $ marked off %s; %d $-> %d $ %n",
amount, getAccountName(), thisTempAmount, getAmount());
account.addMoney(amount);
}
}
@Override
void addMoney(int amount) {
int thisTempAmount = getAmount();
setAmount(getAmount() + amount);
System.out.printf("%d $ settled an %s; %d $-> %d $ %n",
amount, getAccountName(), thisTempAmount, getAmount());
}
}