/
What we wish to do is to rewrite the code above so that the effect wil What we wish to do is to rewrite the code above so that the effect wil

What we wish to do is to rewrite the code above so that the effect wil - PDF document

jane-oiler
jane-oiler . @jane-oiler
Follow
388 views
Uploaded On 2015-09-27

What we wish to do is to rewrite the code above so that the effect wil - PPT Presentation

obj3 draw obj1 draw 13 0 1 2 3 4 If w ID: 142152

obj3 draw() obj1 draw()

Share:

Link:

Embed:

Download Presentation from below link

Download Pdf The PPT/PDF document "What we wish to do is to rewrite the cod..." is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

What we wish to do is to rewrite the code above so that the effect will be as follows: obj3 draw() obj1 draw() 13 0 1 2 3 4 If we could place all the object references inside an array, then the code could be replaced by Run-Time Polymorphism Compile-Time Polymorphism The benefit of this new code would increase as the number of desired methods increased. The problem of achieving such code is the requirement that all contiguous memory arrays be typed—the same type— so that each array position will be the same length. What type could we choose? We might try But then there would be the problem of “type casting” each object back to its reference variable subclass type. Java 1.5 automatically unboxes for the but only if a common type can be specified when the What could we use for ? What we need is an abstract “place-keeper” type—sort of like a variable in Algebra I, but representing an unknown type as opposed to an unknown value. obj0 draw() obj2 draw() obj4 draw() objRef0. objRef1. objRef2. objRef3. objRef4. for (int k = 0; k ) refArray(k].draw(g); BaseClass draw(); class Mouth draw (); class Nose draw (); class LeftEye draw (); class RightEye draw (); class Head draw (); Classes Mouth all extend from abstract class BaseClass each of those classes “is-a” type of BaseClass. Hence the code we are looking for to instantiate an array of generic type would be: Below is the code to draw the happy-face figure using a “polymorphic array” with an abstract base class type. extends BaseClass { public void draw { g.drawOval(75, 75, 400, 400); } }// end class Head extends BaseClass { public void draw { g.fillOval(150, 200, 60, 40); } }// end class RightEye class LeftEye { public void draw { g.drawOval(300, 200, 60, 40); } }// end class LeftEye import java.awt.*; public class PolyArray extends java.applet.Applet { public void paint(Graphics g) { [] refArray = new [5]; refArray[0] = new Head(); refArray[1] = new LeftEye(); refArray[2] = new RightEye(); refArray[3] = new Nose(); refArray[4] = new Mouth(); for (BaseClass e: refArray) e.draw(g); }// end paint }// end class PolyArray abstract class BaseClass { abstract void draw(Graphics g); } class Nose extends BaseClass class Mouth extends { { public void draw(Graphics g) public void { g.drawOval(250, 300, 30, 30); } { g.drawArc(175, 300, 200, 100, 180, 180); } }// end class Nose } // end class Mouth 14