The JavaTM Tutorial
Previous Page Lesson Contents Next Page Start of Tutorial > Start of Trail > Start of Lesson Search
Feedback Form

Trail: Learning the Java Language
Lesson: Classes and Inheritance

Questions and Exercises: Implementing Nested Classes

Questions

1. Match each situation in the first column with the most appropriate type of nested class in the second column.
 a. The only users of this nested class will be instances of the enclosing class or instances of the enclosing class's subclasses.
 1. anonymous inner class
 b. Anyone can use this nested class.
 2. protected inner class
 c. Only instances of the declaring class need to use this nested class, and a particular instance might use it several times.
 3. public static nested class
 d. This tiny nested class is used just once, to create an object that implements an interface.
 4. protected static nested class
 e. This nested class has information about its enclosing class (not about instances of the enclosing class) and is used only by its enclosing class and perhaps their subclasses.
 5. private static nested class
 f. Similar situation as the preceding (choice e), but not intended to be used by subclasses.
 6. private inner class

2. The program Problem.java (in a .java source file) doesn't compile. What do you need to do to make it compile? Why?

3. Use the 1.3 API documentation for the Box (in the API reference documentation) class (in the javax.swing package) to help you answer the following questions.

a. What static nested class does Box define?
b. What inner class does Box define?
c. What is the superclass of Box’s inner class?
d. Which of Box’s nested classes can you use from any class?
e. How do you create an instance of Box’s Filler class?

Exercises

1. First, get the source file InnerClassDemo.java (in a .java source file)

a. Compile and run InnerClassDemo.java (in a .java source file).

b. Make a copy of InnerClassDemo. Add to it an inner class named MyActionListener that implements the ActionListener interface. The ActionListener interface defines a single method. Put the following code into your implementation of the method: quit();

Delete the double forward slashes (//) in front of the following line of code:

     //button.addActionListener(new MyActionListener());

Now compile and run the program. What is the difference in behavior between this version and the previous version of InnerClassDemo?

c. Make a copy of the program you created in exercise 1b. Change your ActionListener implementation to be an anonymous inner class. (Hint: The program has another anonymous inner class, a WindowAdapter, which you can refer to for syntax help.)

2. Get the file Class1.java (in a .java source file).

a. Compile and run Class1. What is the output?

b. Create a file called Class2.java that defines subclasses of both Class1 and its inner class, InnerClass1. (Call the subclasses Class2 and InnerClass2, respectively.) InnerClass2 should override the getAnotherString method to return "InnerClass2 version of getAnotherString invoked". Class2 should define one constructor and one method:

What is the output when you run Class2?

Check your answers. (in the Learning the Java Language trail)


Previous Page Lesson Contents Next Page Start of Tutorial > Start of Trail > Start of Lesson Search
Feedback Form

Copyright 1995-2004 Sun Microsystems, Inc. All rights reserved.