title: Java Extends error - incompatible types
body: <p>I am working through my Lecturing class examples, attempting to use extends in java to create an array of different objects. I cant quite explain it so my code is:</p>
  
  <p><code>Car</code> Class:</p>
  
  <pre><code>public class Car extends RoadVehicle {
      //single instance variable make
      private String make;
  
      /**
       * Constructor takes the parameters make
       * which describes the make of car
       */
      public Car (String make, String colour) {
          //sets up initial make 
          super (colour);
          this.make = make;
      }
  
      /** get the make 
       */
      public String getMake() {
          return make;
      }
  
      public String toString () {
          return "The colour of the " + make +" is "+ colour;
      }
  
      public static void main(String[] args) {
          Car car1 = new Car ("Ferrari", "Red");
          System.out.println(car1);
          Car car2 = new Car ("Volvo", "Blue");
          car2.addFuel(20);
          System.out.println(car2);
          Car car3 =car2;
          car2.setColour("Green");
          car3.useFuel(10);
          System.out.println(car2);
          System.out.println(car3);
      }
  }
  </code></pre>
  
  <p><code>Bus</code> Class:</p>
  
  <pre><code>public class Bus extends RoadVehicle {
      private int seats;// number of seats on bus
  
      public Bus (int seats, String colour) {
          super (colour);
          this.seats = seats;
      }
  
      public int getSeats () {
          return seats;
      }
  
      public String toString () {
          return "The " + colour +" bus with "+ seats +" seats.";
      }
  
      public static void main(String[] args) {
          Bus bus1 = new Bus (10, "Red");
          System.out.println(bus1);
      }
  }
  </code></pre>
  
  <p><code>RoadVehicle</code> Class:</p>
  
  <pre><code>/** Class to represent the colour and fuel content of the car
   */
  public abstract class RoadVehicle {
      protected String colour;
      private int fuel;
  
      /**
       * Constructor takes the parameters colour and fuel,
       * which describes the car and amount of fuel
       */
      public RoadVehicle(String colour) {
          //sets up initial fuel and colour
          this.colour = colour;
          this.fuel = 0;
      }
  
      /**
       * Get the colour
       */
      public String getColour () {
          return colour;
      }
  
      /**
       * get the amount of fuel
       */
      public int getFuel () {
          return fuel;
      }
  
      /**
       * Change the colour of the car to new colour,
       * there is no check that the string is a sensible car colour
       */
      public void setColour (String newColour){
          colour = newColour;
      }
  
      /**
       * Chaging the amount of fuel in the car via adding integer
       * We have no check for negative numbers
       */
      public void addFuel (int amount) {
          fuel = fuel + amount;
      }
  
      /**
       * Change the amount of fuel via subtracting integer
       * We have no check for negative numbers
       */
      public void useFuel(int amount) {
          fuel = fuel - amount;
      }
  
      /**
       * Show the make and colour of the car, along with fuel remaining
       */
      public abstract String toString ();
  
  }
  </code></pre>
  
  <p>The <code>GoodsVehicle</code> class</p>
  
  <pre><code>public class GoodsVehicle extends RoadVehicle {
      private int maxWeight;
      private String typeOfVehicle;
  
      public GoodsVehicle (int maxWeight, String typeOfVehicle, String colour) {
          super (colour);
          this.maxWeight=maxWeight;
          this.typeOfVehicle=typeOfVehicle;
      }
  
      public int getMaxWeight() {
          return maxWeight;
      }
  
      public String getVehicleType () {
          return typeOfVehicle;
      }
  
      public String toString () {
          return colour + " " + typeOfVehicle + " max Weight = " + maxWeight;
      }
  
      public static void main(String[] args) {
          GoodsVehicle vechile1 = new GoodsVehicle (10, "van", "Red");
          System.out.println(vechile1);
      }
  </code></pre>
  
  <p>The <code>TrafficQueue</code> class then:</p>
  
  <pre><code>private RoadVehicle [] Vehicles;
  private RoadVehicle [] Cars2;
  private static int numberOfCars; //  has to be static for while loop
  private String make, colour;
  
  public void add(RoadVehicle car) {
    if(numberOfCars==Vehicles.length) {
       System.out.println("Queue is full! We cannot add any more cars to the Queue!");
       System.exit(1);
    } else {
       Vehicles[numberOfCars] = car;
       numberOfCars ++;
       System.out.println("Car added to queue. Number of cars is:  "  + numberOfCars);
  
  public static void resetNumberOfCars() {
      numberOfCars = 0 ;
  }
  
  
  /**
   * To test the program we have made
   */
  public static void main (String [] args) {
  
     TrafficQueue queue1 = new TrafficQueue(6);
  
     Car car1 = new Car ("car", "red");
     Car car2 = new Car ("car2", "green");
     Bus bus1 = new Bus (2, "red");
     Bus bus2 = new Bus (3, "green");
     GoodsVehicle vehicle1 = new GoodsVehicle(5, "GoodsVehicle1", "red");
     GoodsVehicle vehicle2 = new GoodsVehicle (5,"GoodsVehicle2", "green");
  
     queue1.add(car1);
  </code></pre>
  
  <p>In simple terms, I have a <code>Car</code>, <code>Bus</code> and <code>RoadVehicle</code> class. These all extend from another class <code>Vehicles</code>. I am creating 2 objects in each of the classes, and then, I am trying to add them to the <code>TrafficQueue queue1</code>.</p>
  
  <p>If I just try the above, it gives the following error:</p>
  
  <blockquote>
    <p>incompatible types:m Car cannot be converted to RoadVehicle.</p>
  </blockquote>
  
  <p>The code works fine up until this point, so what is it that I am missing that doesn't allow me to add the differenct <code>Vehicles</code> to the <code>TrafficQueue</code>?</p>