<< Chapter < Page | Chapter >> Page > |
In this simple program objects of all four classes are created and their fields are read.
Exercise In
CParticle
, add the declaration
int
charge = -1;
. Compile and run the program. Is the output different?
Explain what happens.
Concept Subclasses inherit the methods of its superclasses and can add new methods of its own. You can override an inherited method by writing a new methodwith the same signature as the inherited method.
Program: Inheritance02.java
// Learning Object Inheritance02
// inheriting and overriding methodsclass Particle {
int position;
Particle(int p) { position = p;
}
void newPosition(int delta) { position = position + 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 Inheritance02 {
public static void main(/*String[] args*/) {
Particle p = new Particle(10); AParticle a = new AParticle(10, 2.0);
BParticle b = new BParticle(10, 3); CParticle c = new CParticle(10, 4, true);
p.newPosition(10);
int pPosition = p.position; a.newPosition(10);
int aPosition = a.position; b.newPosition(10);
int bPosition = b.position; c.newPosition(10);
int cPosition = c.position; }
}
This program calls the method
newPosition
, which
is overridden in
AParticle
and
CParticle
but not in
BParticle
.
newPosition
is invoked for each object and the modified
value of
position
is assigned to a variable.p
calls the method defined in class
Particle
.a
calls the method defined
in the class
AParticle
; this method overrides the method declared
in class
Particle
.b
calls the method defined
in the superclass
Particle
; since the method was
not overridden
in
BParticle
, the method called is the one inherited from the superclass.c
calls the method defined
in the class
BParticle
; this method overrides the method declared
in class
Particle
.
Exercise Remove the method
newPosition
from
CParticle
. Which method is invoked for
c.newPosition
?
Exercise Remove the method
newPosition
from
CParticle
and add a method with the same signature to
BParticle
. Which method is invoked for
c.newPosition
?
Concept A variable
v
of type
T
can contain a
reference to an object of type
T
or of the type of any subclass of
T
. When invoking
v.m
for some method
m
that is
overridden in a subclass, it is the type of the
object currently
referenced by
v
(not the type of the
variable
v
) that determines which method is called. This is
called
dynamic dispatching because the call is dispatched at
runtime.
Notification Switch
Would you like to follow the 'Learning objects for java (with jeliot)' conversation and receive update notifications?