// 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();
  }
}