CLASS EXTENSION
Program 14.1 illustrates the use of class extension in Java. Every Vehicle is an Object;every Car is a Vehicle; thus every Car is also an Object. Every Vehicle (and thus every Car and Truck) has an integer position field and a move method.An object-oriented program.
class Vehicle {
int position;
void move (int x) { position = position + x; }
}
class Car extends Vehicle{
int passengers;
void await(Vehicle v) {
if (v.position < position)
v.move(position - v.position);
else
this.move(10);
}
}
class Truck extends Vehicle{
void move(int x) {
if (x <= 55) { position = position + x; }
}
}
class Main{
public static void main(String args[]) {
Truck t = new Truck();
Car c = new Car();
Vehicle v = c;
c.passengers = 2;
c.move(60);
v.move(70);
c.await(t);
}
}
In addition, a Car has an integer passengers field and an await method. The variables in scope on entry to await are
passengers because it is a field of Car, position because it is (implicitly) a field of Car, v because it is a formal parameter of await, this because it is (implicitly) a formal parameter of await.
At the call to c.await(t), the truck t is bound to the formal parameter v of the await method. Then when v.move is called, this activates the Truck_move method body, not Vehicle_move.
We use the notation A_m to indicate a method instance m declared within aclass A. This is not part of the Java syntax, it is just for use in discussing the semantics of Java programs. Each different declaration of a method is a different method instance. Two different method instances could have the same method name if, for example, one overrides the other.