Java - Изменить атрибут объекта подкласса - PullRequest
0 голосов
/ 27 мая 2020

У меня есть следующий java суперкласс с конструктором, геттерами и сеттерами для каждого атрибута:

public  class vehicle {
     int vehicleId;

public vehicle(int vehicleId) {
        super();
        this.vehicleId = vehicleId;

    }

     public int getVehicleId() {
    return vehicleId;
}

public void setVehicleId(int vehicleId) {
    this.vehicleId = vehicleId;
} 

И подкласс автомобиля, который расширяет суперкласс автомобиля и имеет несколько уникальных атрибутов:

public class car extends vehicle{

private String wheels;

//constructor
    public car( int vehicleId, String wheels) {
        super(vehicleId);
        this.wheels = wheels;
    }

//getters and setters 

public int getWheels() {
    return wheels;
}

public void setWheels(int wheels) {
    this.wheels = wheels;
}

Я создаю новый связанный список объектов транспортного средства и добавляю к нему новый объект автомобиля:

LinkedList<vehicle> gbm = new LinkedList<vehicle>();
car car = new car(0, "");
car.setVehicleId(1);
car.setWheels("alloy");
gbm.add(car);

Я могу изменить любой из атрибутов, принадлежащих суперклассу транспортного средства, с помощью функции вот так:

public static void editVehicleId(int vid, int vehicleId) {

        for (vehicle obj : gbm) {
            if (obj.vehicleId == vid) {
                obj.setVehicleId(vehicleId);

            } else {
                System.out.println("No matching vehicle Id found - please check input");
            }
        }

    }

Но когда я пытаюсь создать аналогичную функцию для изменения одного из атрибутов подкласса, я получаю эту ошибку: «метод setWheels (int) не определен для типа транспортного средства».

public static void editWheels(int vid, int wheels) {

        for (vehicle obj : gbm) {
            if (obj.vehicleId == vid) { 
                obj.setWheels(wheels);

            } else {
                System.out.println("No matching vehicle Id found - please check input");
            }
        }

    }

Может кто-нибудь сказать мне, как отредактировать один из атрибутов подкласса c?

1 Ответ

1 голос
/ 27 мая 2020

Ваша переменная для l oop - это тип транспортного средства. Поскольку это метод класса car, сделайте его объектом car:

for (vehicle obj : gbm) {
    if (obj.vehicleId == vid) {
        if (obj instanceof car) {
            ((car)obj).setWheels(wheels);
        }
    }
    ... rest of loop ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...