当前位置: 首页 > 知识库问答 >
问题:

Java-更改子类对象属性

锺离嘉茂
2023-03-14

我有以下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;
} 

和一个car子类,它扩展了vehicle超类,并具有几个独特的属性:

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

我创建一个新的vehicle对象链表,并向其中添加一个新的car对象:

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

我可以用下面这样的函数更改属于vehicle超级类的任何属性:

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)对于类型Vehicle是未定义的”。

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

    }

有人能告诉我如何编辑子类的特定属性吗?

共有1个答案

伍玮
2023-03-14

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

for (vehicle obj : gbm) {
    if (obj.vehicleId == vid) {
        if (obj instanceof car) {
            ((car)obj).setWheels(wheels);
        }
    }
    ... rest of loop ...
}
 类似资料:
  • 问题内容: 我只是阅读了watch()方法的Mozilla文档。它看起来非常有用。 但是,我找不到与Safari类似的东西。既不是Internet Explorer。 您如何管理跨浏览器的可移植性? 问题答案: 我不久前为此创建了一个小object.watch垫片。它适用于IE8,Safari,Chrome,Firefox,Opera等。

  • 我有一个MyClass,它的属性类型为MyAttribute。该类由MySubClass继承,其属性类型为MySubAttribute。MySubAttribute是MyAttribute的子类: 现在假设我有以下代码: 如何生成MySubAttribute类型的返回值?

  • 问题内容: 在此python文档页面上,它说: 像其身份一样,对象的类型也是不可更改的。 我尝试这个脚本, 结果显示: 我想我更改了的。 怎么了,我想念什么? 问题答案: 该页面的脚注说: [1]在某些情况下,在某些受控条件下可以更改对象的类型。但是,通常这不是一个好主意,因为如果处理不当,它可能会导致某些非常奇怪的行为。 如果您尝试将f2的更改为: 引发TypeError:

  • 我有一个包含很多字段的列表,需要使用stream在一次传递中创建一个列表。 > 我们需要将列表中的字段current标记为true,以获得输入列表中最小的正整数 输入: 输出: 我有点困惑,如何推导逻辑,将单个循环中最小正整数的当前标志(**)更新为true。

  • Java有没有办法实现这样的目标: 而不是反复输入相同的变量名?谢谢

  • 我有以下基类和子类: 在我的代码中,我正在检查一个类的实例,检查一个我知道存在于基类中的字段-我希望它默认为值。但是,我的代码引发了以下异常: AttributeError:“TypeTwoEvent”对象没有属性“foobar” 我的印象是基类字段将被子类继承,创建子类的实例将实例化基类(从而调用其构造函数)... 我在这里错过了什么?为什么没有属性-当派生它的基类具有属性时?