<< Chapter < Page Chapter >> Page >

An array whose elements are of class Particle can store references to objects of any of its subclasses.

  • The objects are created and references to them assigned to elements of the elements of the array p .
  • Method newPosition is invoked for the object referenced by each element of the array p . Check that the fields accessed are those of the object referenced by thearray element and that the calls are dynamically dispatched to the method appropriate for the type of the object.

Exercise Every object in Java is a subclass of the class Object . Modify the program so that the variable p is of type array of Object .

Abstract classes

Concept Very often the “root” of a set of derived types has no meaning itself, in the sense that objects of that type would never bedeclared. For example, in a realistic simulation program, the would be no real particles that are just “particles,” only particles with names like α -particles and β -particles. An abstract class can be declared which serves only as a root from which to derive a hierarchy of subclasses.It is not legal to declare objects of an abstract class, although variables of its type may be declared and used to reference objects of any type within the hierarchy. A method may also bedeclared abstract; this indicates that it must be overridden in subclasses.

Program: Inheritance06.java

// Learning Object Inheritance06 //    abstract classesabstract class Particle {     int position;      Particle(int p) {        position = p;     }    abstract void newPosition(int delta); }  class AParticle extends Particle {    double spin;      AParticle(int p, double s) {         super(p);        spin = s;     }      void newPosition(int delta) {    if (spin < delta)             position = position + delta;    } }  class BParticle extends Particle {    int charge;      BParticle(int p, int c) {         super(p);        charge = c;     }}  class CParticle extends BParticle {     boolean strange;      CParticle(int p, int c, boolean s) {        super(p, c);         strange = s;    }      void newPosition(int delta) {         if (strange)            position = position * charge;     }}  class Inheritance06 {     public static void main(/*String[] args*/) {         Particle[] p = new Particle[3];        p[0] = new AParticle(20, 2.0);        p[1] = new BParticle(30, 3);        p[2] = new CParticle(40, 4, true);        int i = 0;         p[i++].newPosition(10);         p[i++].newPosition(10);         p[i].newPosition(10);     }}

The follow program declares Particle to be abstract and no objects of that class can be declared. The method newPosition is also declared abstrct because it doesn't make sense to have a particle that you can't move.

Exercise The program does not compile successfully. Why? (Note that in Jeliot, the problem is only found at when animating the program.)Modify the program so that it compiles and executes.

  • The objects are created and references to them assigned toelements of the array.
  • Method newPosition is invoked for the object referenced by each element of the array p . Check that the fields accessed are those of the object referenced by thearray element and that the calls are dynamically dispatched to the method appropriate for the type of the object.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Learning objects for java (with jeliot). OpenStax CNX. Dec 28, 2009 Download for free at http://cnx.org/content/col10915/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Learning objects for java (with jeliot)' conversation and receive update notifications?

Ask