1
1
package com .codedifferently .lesson17 .bank ;
2
2
3
- import com .codedifferently .lesson17 .bank .exceptions .InsufficientFundsException ;
4
3
import java .util .Set ;
5
4
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 {
21
6
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 );
130
8
}
131
- }
9
+
10
+ }
0 commit comments