-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathInnerClasses.java
More file actions
82 lines (63 loc) · 2.04 KB
/
InnerClasses.java
File metadata and controls
82 lines (63 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package oops4;
public class InnerClasses {
public static void main(String[] args) {
// Member Inner Class
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.show();
// Static Nested Class
Outer1.Inner obj = new Outer1.Inner();
obj.show();
// Local Inner Class
Outer2 outer2 = new Outer2();
outer2.display();
}
}
// Member Inner Class
// 1. Has access to all members of outer class (even private)
// 2. Cannot have static members (except constants), since inner class depends on instance and static belongs to class level
// 3. Needs an outer class object
class Outer {
int x = 10;
class Inner {
void show() {
System.out.println(x);
}
}
}
// Static Nested Class
// a static class inside another class
class Outer1 {
static int x = 10;
static class Inner {
void show() {
System.out.println(x);
}
}
}
//🔑 Key differences vs Inner Class
// Feature Inner Class Static Nested Class
// Needs outer object ✅ Yes ❌ No
// Access non-static members ✅ Yes ❌ No
// Access static members ✅ Yes ✅ Yes
// Can have static members ❌ No ✅ Yes
// Memory efficient ❌ Less ✅ More
// Local Inner Class - A class declared inside a method
// scope is limited to the method
// can't be public, private, protected or static
// can access effectively final local variables
class Outer2 {
void display() {
int x = 19;
// x = 20; // not effectively final
class LocalInner {
void show() {
System.out.println("Hello");
// can access only effectively final local variables
System.out.println(x);
}
}
LocalInner obj = new LocalInner();
obj.show();
}
}