Ich arbeite durch meine Lecturing-Klassenbeispiele und versuche, in Java zu erweitern, um ein Array von verschiedenen Objekten zu erstellen. Ich kann nicht ganz erklären es so ist mein Code:Java erweitert fehlerinkompatible Typen
Car
Klasse:
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
Klasse:
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
Klasse:
/** 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();
}
Die GoodsVehicle
Klasse
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);
}
Die TrafficQueue
Klasse dann:
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);
In einfachen Worten, ich habe eine Car
, Bus
und RoadVehicle
Klasse. Diese alle erstrecken sich von einer anderen Klasse Vehicles
. Ich erstelle 2 Objekte in jeder Klasse und versuche dann, sie zu hinzuzufügen.
Wenn ich versuche, nur die oben, gibt es folgende Fehlermeldung:
incompatible types:m Car cannot be converted to RoadVehicle.
Der Code funktioniert bis zu diesem Punkt in Ordnung, also, was es ist, dass ich das bin fehlt erlaubt mir nicht, das hinzufügen differenzieren Vehicles
zu TrafficQueue
?
Können Sie bitte die entsprechenden Klassendefinitionen anzeigen (zB 'Klasse Auto erweitert BLAHBLAH')? Es würde helfen, die tatsächliche Vererbungsstruktur zu sehen. – devnull69
Wenn 'TrafficQueue'' 'RoadVehicle'' erwartet, stelle sicher, dass' Car' diese Klasse/Schnittstelle erweitert/implementiert. –
Der angegebene Code macht es klar, warum es passiert, Sie sollten wahrscheinlich alle Klassen, die Sie hier verwenden, innerhalb der Frage hinzufügen, oder vielmehr, es sind relevante Teile. – SomeJavaGuy