首页 > 解决方案 > Java - 更改子类对象的属性

问题描述

我有以下java超类,每个属性都有构造函数和getter和setter:

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");
            }
        }

    }

有人可以告诉我如何编辑子类特定属性之一吗?

标签: java

解决方案


您的 for 循环变量是一种车辆类型。由于这是汽车类的方法,因此将其设为汽车对象:

for (vehicle obj : gbm) {
    if (obj.vehicleId == vid) {
        if (obj instanceof car) {
            ((car)obj).setWheels(wheels);
        }
    }
    ... rest of loop ...
}

推荐阅读