java - 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");
}
}
}
有人可以告诉我如何编辑子类特定属性之一吗?
解决方案
您的 for 循环变量是一种车辆类型。由于这是汽车类的方法,因此将其设为汽车对象:
for (vehicle obj : gbm) {
if (obj.vehicleId == vid) {
if (obj instanceof car) {
((car)obj).setWheels(wheels);
}
}
... rest of loop ...
}
推荐阅读
- oracle - 查询之间的条件
- python - 迭代解包函数输出 - 错误:要解包的值太多
- c - 'scanf' 后值发生变化
- python - 有没有办法使用 Twitter API 创建和销毁静音词
- cucumber - 我无法成功运行黄瓜报告
- docker - Network usage data between every two pairs of docker containers
- excel - 有条件地粘贴值,利用相邻单元格
- php - 这个登录系统有多安全?(在 PHP 中使用 Cookie)
- javascript - 打字稿:'any []'类型的参数不可分配给'[]'类型的参数.ts(2345)
- c# - how to check whether items present in list box & how to check list box has duplicates? in csharp