Download presentation
Presentation is loading. Please wait.
Published byCarmel Lloyd Modified over 9 years ago
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.