3.8. Inner Class Overview
The classes and interfaces we have seen so far in this chapter
have all been top-level classes (i.e., they are direct members
of packages, not nested within any other classes). Starting in Java 1.1, however, there are four other types of
classes, loosely known as inner classes, that
can be defined in a Java program. Used correctly, inner classes
are an elegant and powerful feature of the Java language. These
four types of classes are summarized here:
-
Static member classes
-
A static member class is a class (or interface) defined as a
static member of another class. A
static method is called a class method,
so, by analogy, we could call this type of inner class a
"class class," but this terminology would obviously be
confusing. A static member class behaves much like an
ordinary top-level class, except that it can access the
static members of the class that contains
it. Interfaces can be defined as static members of classes.
-
Member classes
-
A member class is also defined as a member of an enclosing
class, but is not declared with the
static modifier. This type of inner
class is analogous to an instance method or
field. An instance of a member class is always associated
with an instance of the enclosing class, and the code of a
member class has access to all the fields and methods (both
static and non-static)
of its enclosing class. There are several features of Java
syntax that exist specifically to work with the enclosing
instance of a member class. Interfaces can only be defined
as static members of a class, not as
non-static members.
-
Local classes
-
A local class is a class defined within
a block of Java code. Like a local variable, a local class
is visible only within that block. Although local classes
are not member classes, they are still defined within an
enclosing class, so they share many of the features of
member classes. Additionally, however, a local class can
access any final local variables or
parameters that are accessible in the scope of the block
that defines the class. Interfaces cannot be defined
locally.
-
Anonymous classes
-
An anonymous class is a kind of local
class that has no name; it combines the syntax for
class definition with the syntax for object instantiation. While a local class definition is a Java statement, an
anonymous class definition (and instantiation) is a Java
expression, so it can appear as part of a larger
expression, such as method invocation. Interfaces cannot be
defined anonymously.
Java programmers have not reached a consensus
on the appropriate names for the various kinds of inner
classes. Thus, you may find them referred to by different names in
different situations. In particular, static member classes are
sometimes called "nested top-level" classes, and the term "nested
classes" may refer to all types of inner classes. The term "inner classes" is itself overloaded and
sometimes refers specifically to member classes. On
other occasions, "inner classes" refers to member
classes, local
classes, and anonymous classes, but not static member classes. In this book, I use "inner class" to mean any class other than a
standard top-level class and the names shown previously to refer
to the individual types of inner classes.
| | |
3.7. Interfaces | | 3.9. Static Member Classes |
Copyright © 2001 O'Reilly & Associates. All rights reserved.
|
|