2016-11-24 7 views
-1

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?

+2

Können Sie bitte die entsprechenden Klassendefinitionen anzeigen (zB 'Klasse Auto erweitert BLAHBLAH')? Es würde helfen, die tatsächliche Vererbungsstruktur zu sehen. – devnull69

+2

Wenn 'TrafficQueue'' 'RoadVehicle'' erwartet, stelle sicher, dass' Car' diese Klasse/Schnittstelle erweitert/implementiert. –

+0

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

Antwort

-1

Ist es nur ein Tippfehler oder haben Sie Vehicle und RoadVehicle verwechselt?

Yor Car Klasse sollte public class Car extends RoadVehicle {...}

Ihre TrafficQueue erklärt werden sollte eine Funktion public void add(RoadVehicle v) {...}

Wenn Car tatsächlich Vehicle erstreckt und add() erwartet eine RoadVehicle, es nicht einmal funktioniert, wenn RoadVehicleVehicle seit RoadVehicle erstreckt (erwartet) ist spezifischer als Vehicle (mitgeliefert).

+0

Sorry Guys, kämpfte um den Code im richtigen Format zu bekommen! –

+0

Die Deklaration von 'Car' fehlt noch. Verlängert es "RoadVehicle"? –

+0

Ist die Deklaration nicht da? an der Spitze meiner 'Car' Klasse? Es erweitert 'RoadVehicle' ja, und innerhalb' TrafficQueue' kann ich ein neues Auto erstellen, wie oben, und der Code kompiliert. –