Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
You can define a class as a member of 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 enclosing 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.
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.You may encounter nested classes of both kinds in the Java platform API and be required to use them. However, most nested classes that you write will probably be inner classes.
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Copyright 1995-2005 Sun Microsystems, Inc. All rights reserved.