Java:从父对象创建子类对象

2022-09-01 01:34:25

新手 Java 问题。假设我有:

public class Car{
  ...
}

public class Truck extends Car{
  ...
}

假设我已经有一个 Car 对象,如何从这个 Car 对象创建新的 Truck 对象,以便将 Car 对象的所有值复制到我的新 Truck 对象中?理想情况下,我可以做这样的事情:

Car c = new Car();
/* ... c gets populated */

Truck t = new Truck(c);
/* would like t to have all of c's values */

我是否必须编写自己的副本构造函数?每次汽车获得新字段时,都必须更新...


答案 1

是的,只需向 Truck 添加一个构造函数即可。您可能还想向 Car 添加一个构造函数,尽管不一定是公共的:

public class Car {
    protected Car(Car orig) {
    ...
}

public class Truck extends Car {
    public Truck(Car orig) {
        super(orig);
    }
    ...
}

通常,最好使类成为叶子(您可能希望将其标记为最终)或抽象。

它看起来好像你想要一个对象,然后让同一个实例变成一个.执行此操作的更好方法是将行为委托给 () 中的另一个对象。所以:CarTruckCarVehicle

public final class Vehicle {
    private VehicleBehaviour behaviour = VehicleBehaviour.CAR;

    public void becomeTruck() {
        this.behaviour =  VehicleBehaviour.TRUCK;
    } 
    ...
}

如果实现,则可以“自动”将对象复制到同一类的实例。但是,这存在许多问题,包括必须复制可变对象的每个字段,这很容易出错并禁止使用final。Cloneable


答案 2

如果您在项目中使用Spring,则可以使用ReflemUtils。


推荐