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

时间:2016-11-24 15:10:23

标签: java extends incompatibletypeerror

我正在研究我的Lecturing类示例,尝试在java中使用extends来创建不同对象的数组。我无法解释它所以我的代码是:

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 Car无法转换为RoadVehicle。

代码在此之前工作正常,那么我错过的是什么,它不允许我将差异Vehicles添加到TrafficQueue

1 个答案:

答案 0 :(得分:0)

这只是一个错字还是你混淆了VehicleRoadVehicle

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

您的TrafficQueue应该有一个功能public void add(RoadVehicle v) {...}

如果Car确实延伸Vehicleadd()期望RoadVehicle,那么即使RoadVehicle延伸Vehicle,它也不会有效{ {1}}(预期)比RoadVehicle(已提供)更具体。