The JavaTM Tutorial

| 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` doesn't compile. What do you need to do to make it compile? Why?

> 3. Use the 1.3 API documentation for the `Box` 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`

> > a. Compile and run `InnerClassDemo.java`.
> > 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`.

> > 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:

> > - A no-argument constructor that initializes the inherited `ic` instance variable to be an instance of `InnerClass2`
> > - A main method that creates an instance of `Class2` and invokes `displayStrings` on that instance

> > What is the output when you run `Class2`?

Check your answers.

| Start of Tutorial > Start of Trail > Start of Lesson | Search Feedback Form

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