Inner Classes in Java - PowerPoint PPT Presentation

1 / 18
About This Presentation
Title:

Inner Classes in Java

Description:

Need to maintain reference to MyList. Need to access private data in MyList. 7 ... public class Scribble extends Applet. implements MouseListener, MouseMotionListener ... – PowerPoint PPT presentation

Number of Views:535
Avg rating:3.0/5.0
Slides: 19
Provided by: apl2
Category:
Tags: classes | inner | java | scribble

less

Transcript and Presenter's Notes

Title: Inner Classes in Java


1
Inner Classes in Java
  • CMSC 432
  • Shon Vick

2
Conceptual Structure
package p1    class A1   class
A2      ...   class An...package n without
inner classes
package p1    class A1    class A2     
class A2_1 class A2_2        
...         inner classes
3
Example
public x z class OC // outer
class private int x 2 public class
IC // inner class int z 4
public int getSum() return
4
Why?
  • Logical grouping of functionality
  • Data hiding
  • Yet another encapsulation mechanism
  • Linkage to outer class
  • Well see about this later

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
1st Design
public class MyIterator private MyList
list private int pos MyIterator(MyList
list) this.list list pos 0
public boolean hasNext() return (pos lt
list.size) public Object next()
return list.apos
  • Problems
  • Need to maintain reference to MyList
  • Need to access private data in MyList

7
2nd 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 lt size) public Object next()
return apos
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
Mechanics and Syntax
  • Class referencing syntax
  • OuterClass.InnerClass
  • Example
  • OC oc new OC( )
  • OC.IC ic name of inner class
  • ic new OC.IC() doesnt 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
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
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
Listeners
  • 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.

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
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
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
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
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
References
  • http//www.cs.umd.edu/class/spring2005/cmsc132/lec
    s/lec27.pdf
  • http//java.sun.com/docs/books/tutorial/java/javaO
    O/nested.html
Write a Comment
User Comments (0)
About PowerShow.com