11package com .codedifferently .lesson17 .bank ;
22
3- import com .codedifferently .lesson17 .bank .exceptions .InsufficientFundsException ;
43import java .util .Set ;
54
6- /** Represents a savings account. */
7- public class SavingsAccount {
8-
9- private final Set <Customer > owners ;
10- private final String accountNumber ;
11- private double balance ;
12- private boolean isActive ;
13-
14- /**
15- * Creates a new savings account.
16- *
17- * @param accountNumber The account number.
18- * @param owners The owners of the account.
19- * @param initialBalance The initial balance of the account.
20- */
5+ public class SavingsAccount extends Account {
216 public SavingsAccount (String accountNumber , Set <Customer > owners , double initialBalance ) {
22- this .accountNumber = accountNumber ;
23- this .owners = owners ;
24- this .balance = initialBalance ;
25- isActive = true ;
26- }
27-
28- /**
29- * Gets the account number.
30- *
31- * @return The account number.
32- */
33- public String getAccountNumber () {
34- return accountNumber ;
35- }
36-
37- /**
38- * Gets the owners of the account.
39- *
40- * @return The owners of the account.
41- */
42- public Set <Customer > getOwners () {
43- return owners ;
44- }
45-
46- /**
47- * Deposits funds into the account.
48- *
49- * @param amount The amount to deposit.
50- */
51- public void deposit (double amount ) throws IllegalStateException {
52- if (isClosed ()) {
53- throw new IllegalStateException ("Cannot deposit to a closed account" );
54- }
55- if (amount <= 0 ) {
56- throw new IllegalArgumentException ("Deposit amount must be positive" );
57- }
58- balance += amount ;
59- }
60-
61- /**
62- * Withdraws funds from the account.
63- *
64- * @param amount
65- * @throws InsufficientFundsException
66- */
67- public void withdraw (double amount ) throws InsufficientFundsException {
68- if (isClosed ()) {
69- throw new IllegalStateException ("Cannot withdraw from a closed account" );
70- }
71- if (amount <= 0 ) {
72- throw new IllegalStateException ("Withdrawal amount must be positive" );
73- }
74- if (balance < amount ) {
75- throw new InsufficientFundsException ("Account does not have enough funds for withdrawal" );
76- }
77- balance -= amount ;
78- }
79-
80- /**
81- * Gets the balance of the account.
82- *
83- * @return The balance of the account.
84- */
85- public double getBalance () {
86- return balance ;
87- }
88-
89- /** Closes the account. */
90- public void closeAccount () throws IllegalStateException {
91- if (balance > 0 ) {
92- throw new IllegalStateException ("Cannot close account with a positive balance" );
93- }
94- isActive = false ;
95- }
96-
97- /**
98- * Checks if the account is closed.
99- *
100- * @return True if the account is closed, otherwise false.
101- */
102- public boolean isClosed () {
103- return !isActive ;
104- }
105-
106- @ Override
107- public int hashCode () {
108- return accountNumber .hashCode ();
109- }
110-
111- @ Override
112- public boolean equals (Object obj ) {
113- if (obj instanceof SavingsAccount other ) {
114- return accountNumber .equals (other .accountNumber );
115- }
116- return false ;
117- }
118-
119- @ Override
120- public String toString () {
121- return "SavingsAccount{"
122- + "accountNumber='"
123- + accountNumber
124- + '\''
125- + ", balance="
126- + balance
127- + ", isActive="
128- + isActive
129- + '}' ;
7+ super (accountNumber , owners , initialBalance );
1308 }
131- }
9+
10+ }
0 commit comments