If I were you I would be a writer not a programmer...   :o)

Cool example!   :o)

David.

----- Original Message -----
From: "Barzilai Spinak" <[EMAIL PROTECTED]>
To: "JDJList" <[EMAIL PROTECTED]>
Sent: Thursday, May 30, 2002 4:25 PM
Subject: [jdjlist] el subb


> Somebody asked a question about polymorphism and another guy
> gave a good example with animals, cats, and dogs that make noises :-)
>
> Let me try another example that may enlighten you even more in the power
> of polymorphism when used with Java.
>
> Joe Smith was a programmer who wrote the following class and interface
>
> ====================================================
> /** This interface states that any class that implements it, must also
>     implement a method called void roll() which semantycs indicates that
>     the given SphericalObject must roll in the way its appropriate for
>     the object
> */
> interface SphericalObject
> { void roll();
> }
> ====================================================
> /** A LittleKid is a HumanBeing who likes to play with SphericalObject's
> */
> class LittleKid extends HumanBeing
> { //.... blah blah blah other methods and stuff...
>
>   void play(SphericalObject so)
>   { so.roll();           // make the so given to me roll!
>     System.out.println("YOOPEEEEEEE!!!!!!!!!");
>   }
> }
> ====================================================
>
> Now the poor programmer Joe Smith compiled the above, getting
> SphericalObject.class and LittleKid.class with the corresponding
> javadocs explaining the way the API works.
> Unfortunately Joe was hit buy a truck and died and evenmore, a virus
> deleted the source code, leaving only the class files and javadoc!!!!!
>
> Six months lager the employer hires another programmer called Susan.
> She writes the following classes:
>
> class Orange extends Fruit implements SphericalObject
> class Basketball extends Toy implements SphericalObject
> class Globe extends Map implements SphericalObject
>
>
> And then writes the following code:
> ..
> LittleKid billy= new LittleKid();
> Orange or= new Orange();
> Basketball ball= new BasketBall();
> Globe planetEarth= new Globe();
>
> // Billy is bored and wants to play.
> // Let's give him some SphericalObjects!!
> billy.play(or);
> billy.play(ball);
> billy.play(planetEarth);
> ..
> =====================================
>
>   Some observations:
> Not all Fruits are SphericalObjects, nor are all kinds of Maps.
> Joe Smith didn't have the time to design any actual SphericalObject
> but was smart enough to design an interface.
> Neither did he have to make a play method that accepts a Fruit, another
> that accepts a Toy, yet another that accepts a Map. That would have been
> too restrictive and in order to make LittleKid play with any new kind of
> SphericalObject we would have to change the source code of LittleKid.
> S**T!! It was deleted by a virus!!!
>
> The way we did it, LittleKid and SphericalObject are written and compiled
> months ni advance and can be used in ways and with objects that Joe never
> dreamed of. They just have to implements the interface and provide a
roll()
> method. Billy will play with the SphericalObject given to him; he knows
> it WILL roll (in whichever way the particular object accomplish the task).
> Evenmore the compiler MAKES SURE it WILL roll because it forces the class
> that implements SphericalObject to have a void roll() method, or on the
> contrary, declare that the class is abstract which means it can't be
> instantiated so we don't have the danger of having a SphericalObject
> for which we have forgotten to provide a void roll() method.
> That would be very dangerous, for if Billy was handed such an object
> and he called roll()... what would then be executed?!?!? Probably
> a program crash would occur.
>
> I hope you start to fill the beauty now and everything is a little
clearer!
>
> Barzilai Spinak
>
> To change your membership options, refer to:
> http://www.sys-con.com/java/list.cfm


To change your membership options, refer to:
http://www.sys-con.com/java/list.cfm

Reply via email to