INNER CLASSES (static, local and anonymous)
Inner class (Nested Classes) : as the name sounds a class which is define inside a class .
syntax for creating inner class :
[modifiers]
class
OuterClassName {
code...
[modifiers]
class
InnerClassName {
code....
}
}
Some key points about Inner class :
A)
An object of an inner class has an implicit reference to the outer
class object that instantiated it. Through this pointer, it gains
access to any variable of the outer object.
B)
Inner classes are actually a phenomenon of the compiler and not the JVM.
C)
The outer class (the class containing the inner class) can instantiate as many number of inner class objects as it wishes, inside it’s code.
D)
No inner class objects are automatically instantiated with an outer class object.
E)
If the inner class is static, then static inner class can be instantiated without an outer class instance, otherwise, the inner class object must be associated with an instance of the outer class.
F)
Inner class code has free access to all elements of the outer class
object that contains it, by name, if the inner class has a varible with same name then
the outer class’s variable can be accesse like this:
<OuterClassName>.
this
.<variableName>
Inner classes may be defined with following access modifiers : public, protected, private, or with default package access.
Based on these modifiers our next category of inner class is :
Static Inner Class
syntax :
<access-specifier>
class
OuterClassName {
public
static
class
<StaticInnerClassName> {
. . .
}
. . .
}
Difference b/w static and non static inner class :
A)
Static members of the outer class are visible to the static inner class, what ever their access level be but Non-static members of the outer class are not available, because there is not instance of the outer class.
B) A static inner class is just like any other inner class, but it
dose not have the reference to its outer class object that generated it.
Local Inner Classes:
Nested class which is define inside the body of a method of outer class is known as local inner classs.
Syntax :
<access-specifier>
class
<OuterClassName> {
code...
<access-specifier> <
return
-type> <MethodName>(<arguments>){
class
<LocalInnerClassName>{
code...
}
code...
}
code...
}
Anonymous Inner Classes
Local inner class which is define without name .
Syntax :
new
SuperType(construction parameters) {
inner
class
methods and data
}
Here, SuperType can be an interface, such as ActionListener; then, the inner class implements that interface. Or SuperType can be a class; then, the inner class extends that class.
Summary of all above Inner classes and compilation :
// Main class
public
class
Main {
// Inner class Test1
class
Test1 {
}
// Inner class Test2
class
Test2 {
}
public
static
void
main(String [] args) {
// Anonymous inner class 1
new
Object() {
};
// Anonymous inner class 2
new
Object() {
};
System.out.println(
"Hello World"
);
}
}
After Compilation by JVM
Main.
class
Main$Test1.
class
Main$Test2.
class
Main$
1
.
class
Main$
2
.
class
Diffrent .class files are generated.
No comments:
Post a Comment