Java扩展了错误 - 不兼容类型



我正在通过我的课堂示例进行工作,试图在Java中使用扩展以创建不同对象的数组。我无法解释它,所以我的代码是:

Car类:

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

Bus类:

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

RoadVehicle类:

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

GoodsVehicle

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

TrafficQueue类,然后:

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);

简单地说,我有一个CarBusRoadVehicle类。这些都从另一个Vehicles延伸。我正在每个类中创建2个对象,然后,我试图将它们添加到TrafficQueue queue1

如果我只是尝试以上,则会给出以下错误:

不兼容的类型:M车无法转换为公路车辆。

该代码可以正常运行,直到现在,我缺少的是什么,我不允许我将不同的Vehicles添加到TrafficQueue

它只是错字还是您混合了VehicleRoadVehicle

yor Car class应声明为 public class Car extends RoadVehicle {...}

您的TrafficQueue应该具有函数public void add(RoadVehicle v) {...}

如果Car确实扩展了Vehicle,并且add()期望RoadVehicle,即使RoadVehicle扩展了Vehicle,它也无法正常工作,因为RoadVehicle(预期)比Vehicle(提供)更具体。