我正在研究我的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);
简单来说,我有一个Car
,Bus
和RoadVehicle
类。这些都来自另一个班级Vehicles
。我在每个类中创建了2个对象,然后,我尝试将它们添加到TrafficQueue queue1
。
如果我只是尝试以上操作,则会出现以下错误:
不兼容的类型:m Car无法转换为RoadVehicle。
代码在此之前工作正常,那么我错过的是什么,它不允许我将差异Vehicles
添加到TrafficQueue
?
答案 0 :(得分:0)
这只是一个错字还是你混淆了Vehicle
和RoadVehicle
?
Yor Car
类应声明为public class Car extends RoadVehicle {...}
您的TrafficQueue
应该有一个功能public void add(RoadVehicle v) {...}
如果Car
确实延伸Vehicle
而add()
期望RoadVehicle
,那么即使RoadVehicle
延伸Vehicle
,它也不会有效{ {1}}(预期)比RoadVehicle
(已提供)更具体。