<< Chapter < Page | Chapter >> Page > |
An array whose elements are of class
Particle
can store references to objects of any of its subclasses.
p
.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
.
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.
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.Notification Switch
Would you like to follow the 'Learning objects for java (with jeliot)' conversation and receive update notifications?