Difference between revisions of "Inner Classes"
From Suhrid.net Wiki
Jump to navigationJump to searchLine 1: | Line 1: | ||
* Inner classes have access to members of the outside classes. | * Inner classes have access to members of the outside classes. | ||
* Think of the Inner class as sort of a MEMBER of the outer class. | * Think of the Inner class as sort of a MEMBER of the outer class. | ||
+ | |||
+ | * '''Regular inner classes''' | ||
* This means that regular Inner classes '''cannot have any statics''' (variables or methods) | * This means that regular Inner classes '''cannot have any statics''' (variables or methods) | ||
* Only way to access an instance of the inner classes is through an instance of the outer class. | * Only way to access an instance of the inner classes is through an instance of the outer class. | ||
Line 17: | Line 19: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | * There are different ways on how | + | * There are different ways on how regular inner class instances can be created, depending on where it is accessed from. See below: |
<syntaxhighlight lang="java5"> | <syntaxhighlight lang="java5"> | ||
Line 78: | Line 80: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | * '''Method Local Inner Classes''' | ||
+ | * Class defined inside a method | ||
+ | * The class '''cannot''' use the local variables of the method, including the method arguments unless the variables are declared as final. | ||
+ | |||
[[Category:OCPJP]] | [[Category:OCPJP]] |
Revision as of 23:19, 4 June 2011
- Inner classes have access to members of the outside classes.
- Think of the Inner class as sort of a MEMBER of the outer class.
- Regular inner classes
- This means that regular Inner classes cannot have any statics (variables or methods)
- Only way to access an instance of the inner classes is through an instance of the outer class.
- Remember the funny syntax:
class Outer {
class Inner() {
}
}
Outer o = new Outer();
Outer.Inner i = o.new Inner()
- There are different ways on how regular inner class instances can be created, depending on where it is accessed from. See below:
class Outer {
private String s = "";
Outer() {
}
Outer(String s) {
this.s = s;
}
public String toString() {
return s;
}
class Inner {
private String s = "";
Inner() {
}
Inner(String s) {
this.s = s;
}
public String toString() {
return s;
}
void in() {
System.out.println("Inner object : " + this); //The inner objects instance
System.out.println("Outer object : " + Outer.this); //Access the outer object's instance
}
void makeInner() {
Inner i = new Inner(); //Within the inner class, so regular way to access.
}
}
private void makeInner() {
Outer o = new Outer(); //Accessing from within the outer class
Inner i = o. new Inner(); //Class name can be used as-is
}
}
public class TestInner {
public static void main(String[] args) {
Outer o1 = new Outer("o1"); //Accessing from outside the outerclass
Outer.Inner o1i1 = o1.new Inner("o1i1"); //Class name has to be Outer.Inner
o1i1.in();
}
}
- Method Local Inner Classes
- Class defined inside a method
- The class cannot use the local variables of the method, including the method arguments unless the variables are declared as final.