Lecture 11 Inner Class
Lecture 11 Inner Class
CIC-212
Java Programming
Inner Classes
Inner classes
All the classes so far have been “top level”
It is possible (and useful) to define a class inside
another class
The usual access modifiers (public, protected,
private) can be used
Inner classes were not in Java 1.0
They had to be added in later
2
Four kinds of inner classes
Member classes
Simple and useful
Anonymous classes
Useful, but syntax is ugly
Static member classes (not too useful)
Local classes (not too useful)
class Inner {
int ten = 10;
void setNToTen( ) { n = ten; }
}
void setN ( ) {
new Inner( ).setNToTen( );
}
}
4
Member classes II
Member classes are often used to handle events:
5
Anonymous inner classes
Anonymous inner classes are convenient for short code
(typically a single method)
b.addActionListener(anonymous inner class);
The anonymous inner class can be either:
new Superclass(args) { body }
or
new Interface() { body }
Notice that no class name is given--only the name of the
superclass or interface
If it had a name, it wouldn’t be anonymous, now would it?
The args are arguments to the superclass’s constructor
(interfaces don’t have constructors)
6
Example anonymous inner class
An ActionListener is a Java-supplied interface for
listening to Buttons and some other things
The format (from the previous slide) is
new Interface () { body }
7
Static member classes
static class StaticMember { … }
A static member class can access only static
variables of the outer class
A static member class isn’t “really” an inner
class, but a top-level class that happens to be
written inside another class
Static member classes are not too useful
8
Local classes
A local class is a class defined inside a method
Like any other local declarations, the class declaration
is available only within that method
However, objects created from that local class can
“escape” the class by being assigned to nonlocal
variables
Because its instances may exist after the method
exits, code in the local class cannot access
variables declared in the method unless they are
declared final
This makes them practically useless
There are many other restrictions on local classes
9
Summary
Member classes
An ordinary class, just defined within another
Has full access to the variables of the enclosing class
Anonymous classes
Useful for short Listeners used in only one place
Has full access to the variables of the enclosing class
Static member classes
Defined inside another class, but acts like an outer class
Local classes
Defined within a method
Can access final variables in the enclosing class
10