7 inner classes
TRANSCRIPT
Java
Inner Classes
Interfaces
interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent e);}
• An interface describes methods but does not supply bodies for them.
Four kinds of inner classes
• Member classes– simple
• Anonymous classes– syntax is ugly but anonymous classes are useful
• Static member classes (not too useful)• Local classes (not too useful)• Every class compiles to a separate .class file
Member classes
• A member class is an “ordinary” inner class• class Outer {
int n; class Inner { int ten = 10; void setNToTen ( ) { n = 10; } } void setN ( ) { new Inner ( ).setNToTen ( ); }}
Member classes II
• Member classes are useful for handling events• Button b = new Button (“Click Me”);
b.addActionListener (new Clicker ( ));…class Clicker implements ActionListener { … }
• Can access the variables of the outer class
Anonymous inner classes
• Convenient for short code• b.addActionListener (anonymous inner
class);• The anonymous inner class can be either:
– new Superclass (args) { body }– new Interface (args) { body }
• Notice that no class name is given--only the name of the superclass or interface
Example anonymous inner class
b.addActionListener (new ActionListener ( ) { public void actionPerformed (ActionEvent e) { System.out.println (“Ouch!”);} } ) ;
Static member classes
• static class Inner { … }• A static member class can access only
static variables of the outer class• A static member class isn't "really" an
inner class• Inner classes did not exist in Java 1.0
Local classes
• A local class is a class defined inside a method.
• A local class cannot access variables declared in the method (!)
• There are many other restrictions on local classes.
Interfaces, again
interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent e);}
Adapters
class KeyAdapter implements KeyListener { public void keyPressed(KeyEvent e) { }; public void keyReleased(KeyEvent e) { }; public void keyTyped(KeyEvent e) { };}
The End