2016-11-24 4 views
-1

Я работаю над примерами класса Lecturing, пытаясь использовать расширения в java для создания массива разных объектов. Я не могу достаточно объяснить это так, мой код:Java Extends error - несовместимые типы

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 объекта в каждом из классов, а затем, я пытаюсь добавить их в .

Если я просто пытаюсь выше, это дает следующее сообщение об ошибке:

incompatible types:m Car cannot be converted to RoadVehicle.

Код штрафом до работы до этой точки, так что это, что мне не хватает, что не позволит мне добавить differenct Vehicles до TrafficQueue?

+2

Не могли бы вы показать соответствующие определения классов (например, 'class Car extends BLAHBLAH')? Это поможет увидеть фактическую структуру наследования – devnull69

+2

Если 'TrafficQueue' ожидает, что' RoadVehicle 'убедитесь, что' Car' расширяет/реализует этот класс/интерфейс. –

+0

Данный код действительно дает понять, почему это происходит, вероятно, вы должны добавить все классы, которые вы используете здесь, внутри вопроса, или, скорее, это соответствующие части. – SomeJavaGuy

ответ

-1

Является ли это опечаткой или вы перепутали Vehicle и RoadVehicle?

Йор Car класс должен быть объявлен public class Car extends RoadVehicle {...}

Ваш TrafficQueue должен иметь функцию public void add(RoadVehicle v) {...}

Если Car действительно расширяет Vehicle и add() ожидает RoadVehicle, он не будет работать, даже если RoadVehicle расширяет Vehicle так RoadVehicle (ожидаемый) более конкретно, чем Vehicle (при условии).

+0

Извините manhs, изо всех сил пытался получить код в правильном формате! –

+0

Объявление «Автомобиль» по-прежнему отсутствует. Расширяет ли он «RoadVehicle»? –

+0

Является ли декларация не там? наверху моего класса «Автомобиль»? Он расширяет 'RoadVehicle' да, и внутри' TrafficQueue' я могу создать новый автомобиль, как указано выше, и компиляция кода. –

Смежные вопросы