Presentation is loading. Please wait.

Presentation is loading. Please wait.

Inner Classes in Java CMSC 432 Shon Vick. 2 Conceptual Structure package p 1 class A 1 class A 2... class A n... package n class A 1 class A 2... class.

Similar presentations


Presentation on theme: "Inner Classes in Java CMSC 432 Shon Vick. 2 Conceptual Structure package p 1 class A 1 class A 2... class A n... package n class A 1 class A 2... class."— Presentation transcript:

1 Inner Classes in Java CMSC 432 Shon Vick

2 2 Conceptual Structure package p 1 class A 1 class A 2... class A n... package n class A 1 class A 2... class A n... package n without inner classes package p1 class A 1 class A 2 class A 2_1 class A 2_2 class A 2_1 class A 2_2...... inner classes

3 3Example public x + z; } class OC { // outer class private int x = 2; public class IC { // inner class int z = 4; public int getSum() { return }

4 4Why?   Logical grouping of functionality   Data hiding – Yet another encapsulation mechanism   Linkage to outer class – We’ll see about this later

5 5 Simple Motivating Example public class MyList { private Object [ ] a; private int size; } Say we want to iterate over the elements of this guy …

6 6 1 st Design public class MyIterator { private MyList list; private int pos; MyIterator(MyList list) { this.list = list; pos = 0; } public boolean hasNext() { return (pos < list.size); } public Object next() { return list.a[pos++]; } }  Problems – Need to maintain reference to MyList – Need to access private data in MyList

7 7 2 nd Try – Using Inner Classes public class MyList { private Object [ ] a; private int size; public class MyIterator { private int pos; MyIterator() { pos = 0; } public boolean hasNext() { return (pos < size); } public Object next() { return a[pos++]; }

8 8 Inner Classes Example public class OC { // outer class private int x = 2; public class IC { // inner class int z = 4; public int getSum() { return x + z; }

9 9 Mechanics and Syntax   Class referencing syntax – OuterClass.InnerClass   Example OC oc = new OC( ); OC.IC ic; name of inner class ic = new OC.IC() doesn’t work! ic = oc.new IC(); instantiates inner class - ic now will "know about" oc, but not vice versa ic.getSum() yields 6 can access private x in oc!

10 10 Accessing Outer Scope public class OC { outer class int x = 2; public class IC { inner class int x = 6; public void getX() { inner class method int x = 8; System.out.println( x ); prints 8 System.out.println( this.x ); prints 6 System.out.println( OC.this.x ); prints 2 }

11 11 Instantiating Inner Class  Common Technique  Outer class method returns instance of inner class  Used by Java Collections Library for Iterators  Code Example public class MyList { public class IC implements Iterator { … } public Iterator iterator() { return new IC(); // creates instance of IC } MyList m = new MyList(); Iterator it = m.iterator();

12 12Listeners  Each event is represented by an object that gives information about the event and identifies the event source.  Event sources are typically components.  Each event source can have multiple listeners.Conversely, a single listener can register with multiple event sources. Event Source

13 13 Making the Applet the Listener import java.applet.*; import java.awt.*; import java.awt.event.*; public class Scribble extends Applet implements MouseListener, MouseMotionListener { private int last_x, last_y; public void init() { this.addMouseListener(this); this.addMouseMotionListener(this); } …

14 14 Mouse Events public void mousePressed(MouseEvent e) { last_x = e.getX(); last_y = e.getY(); } public void mouseDragged(MouseEvent e) { Graphics g = this.getGraphics(); int x = e.getX(), y = e.getY(); g.drawLine(last_x, last_y, x, y); last_x = x; last_y = y; }

15 15 Need to implement the whole Interface // The other, unused methods of the MouseListener interface. public void mouseReleased(MouseEvent e) {;} public void mouseClicked(MouseEvent e) {;} public void mouseEntered(MouseEvent e) {;} public void mouseExited(MouseEvent e) {;} // The other method of the MouseMotionListener interface. public void mouseMoved(MouseEvent e) {;} }

16 16 Using Adapters and Inner Classes to Handle Events  The empty method bodies of the MouseListener interface from the previous example make the code harder to read and maintain – Adapter classes are a means around this problem – An adaptor allows you to override just the methods for the events of interest

17 17 Adapters and Anonymous Classes public void init() { // Define, instantiate, and register a MouseListener object. this.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { last_x = e.getX(); last_y = e.getY(); More Info on Innerclasses } } );

18 18 References  http://www.cs.umd.edu/class/spring20 05/cmsc132/lecs/lec27.pdf http://www.cs.umd.edu/class/spring20 05/cmsc132/lecs/lec27.pdf http://www.cs.umd.edu/class/spring20 05/cmsc132/lecs/lec27.pdf  http://java.sun.com/docs/books/tutori al/java/javaOO/nested.html http://java.sun.com/docs/books/tutori al/java/javaOO/nested.html http://java.sun.com/docs/books/tutori al/java/javaOO/nested.html


Download ppt "Inner Classes in Java CMSC 432 Shon Vick. 2 Conceptual Structure package p 1 class A 1 class A 2... class A n... package n class A 1 class A 2... class."

Similar presentations


Ads by Google