Skip to main content
Inner Classes
- A "regular" inner class is declared inside the curly braces of another class, but outside any method or other code block.
- An inner class is a full-fledged member of the enclosing (outer)
class, so it can be marked with an access modifier as well as the
abstract or final modifiers. (Never both abstract and final together—
remember that abstract must be subclassed, whereas final cannot be
subclassed).
- An inner class instance shares a special relationship with an
instance of the enclosing class. This relationship gives the inner class
access to all of the outer class's members, including those marked
private.
- To instantiate an inner class, you must have a reference to an instance of the outer class.
- From code within the enclosing class, you can instantiate the inner
class using only the name of the inner class, as follows: MyInner mi =
new MyInner();
- From code outside the enclosing class's instance methods, you can
instantiate the inner class only by using both the inner and outer class
names, and a reference to the outer class as follows: MyOuter mo = new
MyOuter();
- MyOuter.MyInner inner = mo.new MyInner();
- From code within the inner class, the keyword this holds a reference
to the inner class instance. To reference the outer this (in other
words, the instance of the outer class that this inner instance is tied
to) precede the keyword this with the outer class name as follows:
MyOuter.this;