Java:: Inner Class Concepts
---------------------------------
Inner class concepts introduced in Java v1.1
- as a part of AWT Event Handling improvements.
When to use Inner class:
- Without existing One type of object, if there is no chance for existence of Another type of object then we should go for Inner Class.
Eg 1.
Collge and Department.
Department object can exists if and only if College object exists.
.....................................
public class College {
class Department {
}
}
.....................................
Eg 2.
Map and Entry in java.util Collections Framework.
Entry object is meaningless without Map object.
.....................................
public interface Map<K, V> {
interface Entry<K, V> {
}
}
.....................................
- Relation between Outer and Inner class is "Has-a" relationship OR
Composition OR Aggregation relationship.
Types of inner class:
There are 4 types based on the position of declaration and behaviour
4 types of Innerclass
1. Normal OR Regular Inner classes
2. Method local Inner classes
3. Anonymous Inner classes
4. Static nested classes.
Note:
* We can't touch inner classes directly.
* So, static members not allowed inside inner class.
* Inner classes can have static final CONSTANTS.
Type-1. Normal/Regular Inner class
~~~~~~~~~~~~~~~~~~~~~~
- Named class declared without static modifier directly inside class is called Normal Inner class.
class Outer {
class Inner {
}
}
// Outer.class
// Outer$Inner.class
Accessing InnerClass from
1. Instance area of Outer class
Inner z = new Inner(20).m1();
2. From Static area of Outer class
Outer z = new Outer();
Outer.Inner m = z.new Inner(10);
Outer.Inner n = new Outer().new Inner(40);
Note:
From Normal/Regular inner class we can access both static and non-static members of Outer class directly.
Nesting of Inner classes is possible.
Inner.this.a; // 200
Outer.this.a; // 100
Allowed Access Modifiers:
-----------------------------
for Outer class
public, friendly, final, abstract, strictfp
for Inner class
public, friendly, final,
abstract, strictfp +
private, protected and static.