Typecasting and inheritance.
public class Test {
public static void main(String [] args) {
Car mycar = new Car("Dodge",4,80.0,"automatic");
mycar.print();
int distance = 5000;
System.out.println("It will travel " + distance + " miles in " +
mycar.time(distance) + " hours");
Airplane plane = new Airplane("Airbus",200,1000,30000);
plane.print();
System.out.println("It will travel " + distance + " miles in " +
plane.time(distance) + " hours");
// typecasting
// is this legal?
Vehicle v = new Car("Dodge",4,80.0,"automatic");
// which method will be called?
v.print();
// add a method getTransmission to Car
// is this legal?
//String trans = v.getTransmission();
// typecasting:
String trans = ((Car) v).getTransmission();
// store in a variable:
Car c = (Car) v;
trans = c.getTransmission();
// is this legal?
v = c; // or could write v = (Vehicle) c;
v.print();
//trans = v.getTransmission();
// what happens?
// Airplane a = (Airplane) v;
Vehicle [] vehicles = {mycar, plane, new Vehicle("bike", 1, 20)};
for (Vehicle v1 : vehicles) {
v1.print();
System.out.println("covers 100 miles in " + v1.time(100) + " hours");
}
// instanceof:
System.out.println(mycar instanceof Vehicle);
System.out.println(mycar instanceof Car);
//System.out.println(mycar instanceof Airplane);
System.out.println(mycar instanceof Object);
System.out.println(vehicles[2] instanceof Car);
// which methods are considered the same for the purpose
// of overwriting?
}
}
public class Vehicle {
protected String model;
protected int maxPassengers;
protected double maxSpeed; // mph
public Vehicle(String m, int passengers, double speed) {
model = m;
maxPassengers = passengers;
maxSpeed = speed;
}
// takes distance in miles, returns time in hours
public double time(double distance) {
return distance/maxSpeed;
}
public void print() {
System.out.println("this is a " + model + ", it can carry " +
maxPassengers + " and can travel at " +
maxSpeed + " mph");
}
}
public class Car extends Vehicle {
private String transmissionType;
public Car(String m, int passengers, double speed, String transmission) {
super(m,passengers,speed);
transmissionType = transmission;
}
public void print() {
super.print();
System.out.println("It has " + transmissionType + " transmission");
}
public String getTransmission() {
return transmissionType;
}
}
public class Airplane extends Vehicle {
private int maxAltitude;
public Airplane(String m, int passengers, double speed, int altitude) {
super(m,passengers,speed);
maxAltitude = altitude;
}
public void print() {
super.print();
System.out.println("It's maximum altitude is " + maxAltitude);
}
}
This is an example from CSci 2101 course.