С первого взгляда, не работает CreditCardAccount.withdraw(), во-первых, там сравнивается что-то не то, во-вторых, вызов super не сработает, родительский класс ничего не знает о кредитном лимите и откажется снимать. А вообще, надо знать, что написано в задании. Мало ли что ещё может не соответствовать.
Создать родительский класс Account со следующими атрибутами: номер счета, баланс ,владелец счета Реализовать методы для каждого родительского класса для: пополнения счета на указанную сумму, снятие указанной суммы со счета, запроса баланса Создать дочерние классы с различными типами счетов: Сберегательный счет, Счет кредитной карты Реализовать следующее специфичное поведение для каждого типа счета. Сберегательный счет: - Нельзя снимать деньги со счета, если баланс меньше или равен 0. - За каждую успешную транзакцию должны начисляться проценты (например, 0.5% в год). Счет кредитной карты: - Максимальный баланс на счете составляет 100% от кредитного лимита. - Можно использовать деньги с кредитного лимита, но сумма не должна превышать доступный лимит.
public class Account {
private int accountNumber;
private double balance;
private String owner;
public Account(int accountNumber, double balance, String owner) {
this.accountNumber = accountNumber;
this.balance = balance;
this.owner = owner;
}
public void deposit(double amount) {
balance += amount;
System.out.println(amount + " пополнено на счет " + accountNumber);
}
public void withdraw(double amount) {
if (balance > 0 && balance >= amount) {
balance -= amount;
System.out.println(amount + " снято со счета " + accountNumber);
} else {
System.out.println("Недостаточно средств на счете " + accountNumber);
}
}
public double getBalance() {
return balance;
}
}
// Дочерний класс SavingsAccount
public class SavingsAccount extends Account {
private double interestRate;
public SavingsAccount(int accountNumber, double balance, String owner, double interestRate) {
super(accountNumber, balance, owner);
this.interestRate = interestRate;
}
@Override
public void deposit(double amount) {
super.deposit(amount);
applyInterest();
}
private void applyInterest() {
double interest = getBalance() * interestRate / 100;
super.deposit(interest);
System.out.println(interest + " начислено процентов на счет " + getAccountNumber());
}
}
// Дочерний класс CreditCardAccount
public class CreditCardAccount extends Account {
private double creditLimit;
public CreditCardAccount(int accountNumber, double balance, String owner, double creditLimit) {
super(accountNumber, balance, owner);
this.creditLimit = creditLimit;
}
@Override
public void withdraw(double amount) {
if (amount <= creditLimit && (getBalance() + amount) <= creditLimit) {
super.withdraw(amount);
} else {
System.out.println("Превышен лимит снятия со счета " + getAccountNumber());
}
}
}
// Класс BankSystem
public class BankSystem {
public static void main(String[] args) {
Account savingsAccount = new SavingsAccount(1, 1000, "John Doe", 0.5);
Account creditCardAccount = new CreditCardAccount(2, 500, "Alice Smith", 1000);
savingsAccount.deposit(500);
savingsAccount.withdraw(200);
System.out.println("Баланс сберегательного счета: " + savingsAccount.getBalance());
creditCardAccount.deposit(200);
creditCardAccount.withdraw(700);
System.out.println("Баланс счета кредитной карты: " + creditCardAccount.getBalance());
}
}