Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
The Java programming language allows you define a class within another class. Such a class is called a nested class and is illustrated here:You use nested classes to reflect and to enforce the relationship between two classes. You should define a class within another class when the nested class makes sense only in the context of its enclosing class or when it relies on the enclosing class for its function. For example, a text cursor might make sense only in the context of a text component.class EnclosingClass { ... class ANestedClass { ... } }As a member of its enclosing class, a nested class has a special privilege: It has unlimited access to its enclosing class's members, even if they are declared private. However, this special privilege isn't really special at all. It is fully consistent with the meaning of private and the other access specifiers. The access specifiers restrict access to members for classes outside the top-level class. The nested class is inside its enclosing class so that it has access to its enclosing class's members.
Like other members, a nested class can be declared static (or not). A static nested class is called just that: a static nested class. A nonstatic nested class is called an inner class.
As with static methods and variables, which we call class methods and variables, a static nested class is associated with its enclosing class. And like class methods, a static nested class cannot refer directly to instance variables or methods defined in its enclosing class it can use them only through an object reference.class EnclosingClass { ... static class StaticNestedClass { ... } class InnerClass { ... } }As with instance methods and variables, an inner class is associated with an instance of its enclosing class and has direct access to that object's instance variables and methods. Also, because an inner class is associated with an instance, it cannot define any static members itself.
Both static nested classes and inner classes have member scope. Member scope means that the type is defined directly in the body of the enclosing class it is a member of the class.
To help further differentiate the terms nested class and inner class, it's useful to think about them in the following way. The term nested class reflects the syntactic relationship between two classes; that is, syntactically, the code for one class appears within the code of another. In contrast, the term inner class reflects the relationship between objects that are instances of the two classes. Consider the following classes:
The interesting feature about the relationship between these two classes is not thatclass EnclosingClass { ... class InnerClass { ... } }InnerClass
is syntactically defined withinEnclosingClass
. Rather, it's that an instance ofInnerClass
can exist only within an instance ofEnclosingClass
and that it has direct access to the instance variables and methods of its enclosing instance. The next figure illustrates this idea.Additionally, there are two special kinds of inner classes: local classes and anonymous classes (also called anonymous inner classes). Both of these will be discussed in the next section. An
InnerClass
Exists Within an Instance ofEnclosingClass
You may encounter all of these nested classes in the Java platform API and be required to use them.
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Copyright 1995-2005 Sun Microsystems, Inc. All rights reserved.