6
6
// Lớp chồng nhau (nested class) là một lớp được định nghĩa bên trong một lớp khác.
7
7
8
8
// Ví dụ:
9
+
9
10
// ContactBook là danh bạ điện thoại, bao gồm danh sách các liên hệ và các nhóm.
10
11
class ContactBook {
11
12
public List <Contact > contacts = new ArrayList <>();
12
13
public Map <String , Group > groups = new HashMap <>();
13
14
14
15
// Lớp Contact đại diện cho một liên hệ trong danh bạ, gồm tên và số điện thoại.
16
+ /*
17
+ * Tương tác với lớp bên ngoài:
18
+ * - Các inner class có thể truy cập đầy đủ tới tất cả các phương thức và biến
19
+ * của lớp chứa nó.
20
+ * - Inner class thường không thể truy cập một cách trực tiếp từ bên ngoài lớp
21
+ * chứa nó nếu không thông qua một instance của lớp chứa.
22
+ * - Ví dụ, để tạo một instance của lớp Contact, ta cần thông qua một instance
23
+ * của lớp ContactBook như sau
24
+ * ContactBook myBook = new ContactBook();
25
+ * ContactBook.Contact contact = myBook.new Contact("Alice", "1234567890");
26
+ */
15
27
class Contact {
16
28
private String name ;
17
29
private String phone ;
18
30
19
- // Là một lớp, Contact cũng có hàm khởi tạo.
31
+ // Là một lớp, Contact cũng có hàm tạo.
20
32
// Dùng this để tham chiếu đến biến của lớp Contact.
21
33
public Contact (String name , String phone ) {
22
34
this .name = name ;
@@ -30,29 +42,28 @@ public void displayContact() {
30
42
31
43
// Lớp Group đại diện cho một nhóm trong danh bạ, bao gồm tên nhóm và danh sách
32
44
// các thành viên.
33
- static class Group {
45
+ class Group {
34
46
String name ;
35
- List <String > members = new ArrayList <>();
47
+ List <Contact > members = new ArrayList <>();
36
48
37
49
public Group (String name ) {
38
50
this .name = name ;
39
51
}
40
52
41
- public void addMember (String contactName ) {
53
+ public void addMember (Contact contactName ) {
42
54
members .add (contactName );
43
55
}
44
56
45
57
public void displayGroup () {
46
58
System .out .println ("Group: " + name );
47
59
System .out .println ("Members:" );
48
- for (String member : members ) {
49
- System .out .println (member );
60
+ for (Contact member : members ) {
61
+ System .out .println (member . name );
50
62
}
51
63
}
52
64
}
53
65
54
- public void addContact (String name , String phone ) {
55
- Contact contact = new Contact (name , phone );
66
+ public void addContact (Contact contact ) {
56
67
contacts .add (contact );
57
68
}
58
69
@@ -62,20 +73,27 @@ public void addGroup(String name) {
62
73
}
63
74
}
64
75
76
+ // Lớp NestedClass chứa hàm main để chạy chương trình.
65
77
public class NestedClass {
66
78
public static void main (String [] args ) {
67
79
ContactBook myBook = new ContactBook ();
68
- myBook .addContact ("Alice" , "1234567890" );
69
- myBook .addContact ("Bob" , "0987654321" );
80
+
81
+ ContactBook .Contact contact1 = myBook .new Contact ("Alice" , "1234567890" );
82
+ ContactBook .Contact contact2 = myBook .new Contact ("Bob" , "0987654321" );
83
+
84
+ myBook .addContact (contact1 );
85
+ myBook .addContact (contact2 );
70
86
71
87
myBook .addGroup ("Friends" );
72
- myBook .groups .get ("Friends" ).addMember ("Alice" );
73
- myBook .groups .get ("Friends" ).addMember ("Bob" );
88
+ myBook .groups .get ("Friends" ).addMember (contact1 );
89
+ myBook .groups .get ("Friends" ).addMember (contact2 );
74
90
91
+ System .out .println ("_____________DISPLAY CONTACTS_____________" );
75
92
for (ContactBook .Contact contact : myBook .contacts ) {
76
93
contact .displayContact ();
77
94
}
78
95
96
+ System .out .println ("_____________DISPLAY GROUP_____________" );
79
97
myBook .groups .get ("Friends" ).displayGroup ();
80
98
}
81
99
}
0 commit comments