是的,只是添加一个构造函数卡车。你可能想要添加一个构造函数到Car,虽然不一定公开:
public class Car {
protected Car(Car orig) {
...
}
public class Truck extends Car {
public Truck(Car orig) {
super(orig);
}
...
}
作为一个规则,通常最好是让类(或者你可能想标记那些最终)或抽象。
它看起来好像你想要一个Car对象,然后把同一个实例变成一辆卡车。一个更好的方法是将行为委托给Car(Vehicle)中的另一个对象。所以:
public final class Vehicle {
private VehicleBehaviour behaviour = VehicleBehaviour.CAR;
public void becomeTruck() {
this.behaviour = VehicleBehaviour.TRUCK;
}
...
}
如果实现Cloneable,那么您可以“自动”将对象复制到同一类的实例。但是还有一些问题,包括必须复制易变对象的每个字段,这些对象容易出错,并且禁止使用final。
版权声明:本文为weixin_33954874原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。