Skip to content

Commit 94d8807

Browse files
committed
update
1 parent a752ef1 commit 94d8807

File tree

4 files changed

+250
-25
lines changed

4 files changed

+250
-25
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

Lines changed: 25 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package src.java.JavaCore.NestedClass;
2+
3+
class OuterClass {
4+
private static String name = "Outer Class";
5+
private int x = 10;
6+
7+
8+
// static nested class
9+
static class NestedClass {
10+
public void printName() {
11+
System.out.println("Static Nested Class: " + name);
12+
}
13+
}
14+
15+
16+
// inner class
17+
public class InserClass {
18+
public void printX() {
19+
System.out.println("Inner Class: " + x);
20+
}
21+
}
22+
23+
24+
// local class
25+
public String sayHello(String name) {
26+
int cnt = 20; // mặc đinh default int cnt = 0;
27+
28+
// local class
29+
class WelcomeMessage {
30+
WelcomeMessage(){
31+
}
32+
String getMessage() {
33+
return "Welcome";
34+
}
35+
36+
void showName(){ //Only valid from Java 8
37+
System.out.println(name);
38+
}
39+
}
40+
41+
WelcomeMessage msg = new WelcomeMessage();
42+
return "Local Class: " + msg.getMessage() + " " + name + " to the Java world !";
43+
}
44+
45+
46+
47+
interface Person {
48+
String getName();
49+
}
50+
51+
// Annonymous Class
52+
public void hello(){
53+
// Anonymous Classes
54+
Person john = new Person(){
55+
@Override
56+
public String getName() {
57+
return "Anonymous Class";
58+
}
59+
};
60+
System.out.println(john.getName());
61+
}
62+
63+
64+
}
65+
66+
public class NestedClass {
67+
public static void main(String[] args) {
68+
OuterClass outerClass = new OuterClass();
69+
70+
// static nested class
71+
OuterClass.NestedClass nestedClass = new OuterClass.NestedClass();
72+
nestedClass.printName();
73+
74+
75+
// inner class
76+
OuterClass.InserClass inserClass = outerClass.new InserClass();
77+
inserClass.printX();
78+
79+
// local class
80+
String str = outerClass.sayHello("Tiến");
81+
System.out.println(str);
82+
83+
//Anonymous class
84+
outerClass.hello();
85+
86+
87+
}
88+
}
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
2+
## Nested Class
3+
4+
Nested class là một class được khai báo bên trong một class khác:
5+
```java
6+
class OuterClass {
7+
class InnerClass {
8+
... implment something ....
9+
}
10+
}
11+
```
12+
13+
Nested class được phân chia thành 2 loại:
14+
+ static nested classes
15+
+ non-static nested classes.
16+
17+
### 1. Static Nested Classes: à class được khai báo dạng static bên trong một class khác,
18+
```java
19+
class OuterClass {
20+
static class StaticInnerClass {
21+
... implment something ....
22+
}
23+
}
24+
```
25+
26+
### 2. Non-static Nested Classes:
27+
+ Innser classes
28+
+ Local classes
29+
+ Anonymous Classes
30+
31+
32+
#### [Inner Classes](): là khai bao một class không phải dạng static bên trong một class khác.
33+
```java
34+
public class OuterClass {
35+
private int x = 10;
36+
37+
// inner class
38+
class InnerClass {
39+
public void printf() {
40+
System.out.println("The value of x is " + x);
41+
}
42+
}
43+
}
44+
```
45+
46+
#### [Local Classes](): là khai báo một class bên trong một method khác.
47+
```java
48+
public class OuterClass {
49+
50+
// phương thức của lớp OuterClass
51+
public String sayHello(String name) {
52+
int cnt = 0; // mặc đinh default int cnt = 0;
53+
54+
// local class
55+
class WelcomeMessage {
56+
WelcomeMessage(){
57+
System.out.println(cnt); //Only use, can't change
58+
}
59+
String getMessage() {
60+
return "Welcome";
61+
}
62+
63+
void showName(){//Only valid from Java 8
64+
System.out.println(name);
65+
}
66+
}
67+
68+
WelcomeMessage msg = new WelcomeMessage();
69+
return msg.getMessage() + " " + name + " to the Java world !";
70+
}
71+
72+
73+
// hàm main
74+
public static void main(String[] args) {
75+
System.out.println(new OuterClass().sayHello("John"));
76+
}
77+
78+
}
79+
```
80+
81+
1. Local Classes chỉ có thể được khai báo trong một phương thức hay một block code (một cặp ngoặc nhọn {}).
82+
2. Local Classes không thể truy cập từ bên ngoài phương thức hoặc block code chứa nó.
83+
3. Local Classes có thể sử dụng các biến cục bộ (local variables), biến final hoặc tham số của phương thức hoặc block code chứa nó.
84+
4. Local Classes có thể sử dụng các biến static, final hoặc method static của Outer Class.
85+
5. Local Classes không thể khai báo các biến instance.
86+
6. Local Classes có thể implement các interface hoặc kế thừa từ lớp khác.
87+
7. Local Classes có thể được truyền vào dưới dạng tham số của hàm hoặc được sử dụng trong các hàm.
88+
8. Mã nguồn được đơn giản hóa hơn khi sử dụng Local Classes thay vì tạo ra một lớp mới.
89+
9. Việc sử dụng Local Classes làm cho code trở nên dễ đọc và tái sử dụng hơn.
90+
10. Nên sử dụng Local Classes đúng cách và chỉ khi nó thực sự cần thiết để hạn chế làm cho mã nguồn trở nên khó đọc và khó bảo trì
91+
92+
93+
#### [Anonymous Classes](): nó được khai bao bên trong class hoặc method mà không có tên cụ thể.
94+
95+
```java
96+
public class OuterClass {
97+
98+
interface Person {
99+
String getName();
100+
}
101+
102+
public void hello(){
103+
// Anonymous Classes
104+
Person john = new Person(){
105+
@Override
106+
public String getName() {
107+
return "Johnny";
108+
}
109+
};
110+
System.out.println(john.getName());
111+
}
112+
113+
public static void main(String[] args) {
114+
new OuterClass().hello();
115+
}
116+
117+
}
118+
```
119+
120+
121+
122+
123+
124+
125+
126+
127+
128+
129+
130+
131+
132+
133+
134+
135+
136+

0 commit comments

Comments
 (0)