Экземпляр и приведение, полиморфизм

Основываясь на моем более старом вопросе Link, я работаю чтобы узнать больше о Casting и Instanceof. Это основано на сценарии, описанном в книге HeadFirst.

Итак, в основном у меня теперь есть новый класс (гибрид), который наследует от моего класса транспортного средства, что я пытаюсь сделать, это создать гибридный объект для отображения дополнительной информации, которая приходит с гибридом. Он соответствует, но на самом деле не дает мне никакого представления о том, что вызывает ошибку, за исключением того, что он просто заканчивается на линии, которую я отметил.

public class ShowroomDriver {
    public static void main(String[] args) {
    Showroom cars = new Showroom("Cars");
    Hybrid hybrid1 = new Hybrid("Toyota Prius", "Focus", "John Smith", "TOTAP453453987346283",
            getCalendar(2,3,1998), getCalendar(24,2,2012),
            "Right Hand",//Hybrid Only Info Edit: Forgot to commentout 
            true,
            'C',
            650, 82.0); //Cost & (Hybrid MPG)

    cars.addVechicle(hybrid1);
    cars.getVechicles();

Гибридный класс

import java.util.Calendar;

public class Hybrid extends Vehicle{
    private double consumption;
    private String drive;

    public Hybrid(String Manufacture, String Model, String CustomerName, String Vin, 
            Calendar DateManufactured, Calendar Datesold, String Drive,
            boolean HasbeenSold,
            char TaxBand,
            double Cost, double Consumption){

        super(Manufacture, Model, CustomerName, Vin, DateManufactured, Datesold,
                HasbeenSold,
                TaxBand,
                Cost);
        this.consumption = Consumption;
        this.drive = Drive;
    }

    public Double getConsumption() { return this.consumption; }
    public String getDrive() { return this.drive; }
}

Новый метод транспортного средства

public void displayDetails(){
    for(int i = 0; i <cars.theVehicles.size(); i++){
        if(this.cars.theVehicles.get(i) instanceof Hybrid){//Error here
            Hybrid thehybrids = (Hybrid)this.cars.theVehicles.get(i);
            System.out.println("Consumption: " + thehybrids.getConsumption()+ "\n" +
                    "Drive: " + thehybrids.getDrive());
        }
    }
}

person Melky    schedule 11.11.2012    source источник
comment
Какие ошибки вы получаете?   -  person Rohit Jain    schedule 11.11.2012
comment
Пожалуйста, соблюдайте соглашения об именах Java и убедитесь, что имена ваших переменных и полей начинаются со строчной буквы.   -  person biziclop    schedule 11.11.2012
comment
Я только что попытался поймать, и, похоже, это исключение NullPointerException.   -  person Melky    schedule 11.11.2012
comment
Я не могу понять вашего намерения за этим кастингом: - (Hybrid Only Info) true???   -  person Rohit Jain    schedule 11.11.2012
comment
это означает, что this.cars.theVehicles возвращает значение null, проверьте, правильно ли вы его устанавливаете?   -  person Pankaj    schedule 11.11.2012
comment
@Melky Это означает, что либо cars, либо cars.theVehicles, либо один из элементов в cars.theVehicles равен нулю. В любом случае это не имеет ничего общего с кастингом или instanceof.   -  person biziclop    schedule 11.11.2012
comment
полная трассировка стека была бы полезна   -  person giorashc    schedule 11.11.2012
comment
Кастинга следует избегать, когда это возможно. Не знаю, зачем вам практиковаться в кастинге.   -  person jahroy    schedule 11.11.2012


Ответы (1)


Вам нужно бросить? Вы уже переопределили метод displayDetails() для отображения информации, специфичной для гибрида. Таким образом, вы должны просто иметь возможность вызывать это, и среда выполнения определит правильный метод для вызова.

person Brian Agnew    schedule 11.11.2012
comment
Ваше право, я просто вернулся и удалил то, что было ненужным. Спасибо - person Melky; 11.11.2012