// Pseudo-Java code illustrating "vehicle" object hierarchy abstract class Vehicle { private Color color; protected int speed; public Color getColor() { return color; } public void setColor(Color c) { color = c; } public int getSpeed() { return speed; } public abstract void setSpeed(int s); } interface Fuelable { public abstract void refuel(); public abstract int checkFuel(); } class Car extends Vehicle implements Fuelable { private Wheel leftFrontWheel, rightFrontWheel, leftRearWheel, rightRearWheel; protected int fuel; public void setSpeed { if (s < 65) { speed = s} } public void refuel() { fuel = 10; } public int checkFuel { return fuel; } // and do something with the wheels... } class SportsCar extends Car { public void setSpeed { if ( s < 100) { speed = s} } } class Pickup extends Car { private Payload contents; public void refuel { fuel = 30; } // and public methods to get and set the payload... } class Bicycle extends Vehicle { // two wheels, setSpeed... } class Motorcycle extends Bicycle implements Fuelable { // override setSpeed, implement refuel and checkFuel... } class Sled extends Vehicle { // override setSpeed, runners? } class Highway { public boolean allowOnHighway(Vehicle v) { if (v.getSpeed > 45) return true; else return false; } } class GasStation { public void fillerUp(Fuelable f) { f.refuel(); } }