Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public...

12
Java Inner Classes

Transcript of Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public...

Page 1: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

Java

Inner Classes

Page 2: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

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.

Page 3: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

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

Page 4: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

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 ( ); }}

Page 5: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

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

Page 6: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

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

Page 7: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

Example anonymous inner class

b.addActionListener (new ActionListener ( ) {

public void actionPerformed (ActionEvent e) {

System.out.println (“Ouch!”);

} } ) ;

Page 8: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

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

Page 9: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

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.

Page 10: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

Interfaces, again

interface KeyListener {

public void keyPressed(KeyEvent e);

public void keyReleased(KeyEvent e);

public void keyTyped(KeyEvent e);

}

Page 11: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

Adapters

class KeyAdapter implements KeyListener {

public void keyPressed(KeyEvent e) { };

public void keyReleased(KeyEvent e) { };

public void keyTyped(KeyEvent e) { };

}

Page 12: Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.

The End