Java:如何在不使用父构造函数的情况下从子实例化父对象?

时间:2017-10-30 14:22:26

标签: java oop object inheritance reflection

以下是例子:

public class Car{
  private float param;
  public Car(float rawParam) {
    // process rawParam before assign it to this.param
    this.param = rawParam * 2;
  }
}

public class Truck extends Car{
  public Truck(Car car) {
    // How do I instantiate Car?
  }
}

没有默认的构造函数,所以我不能创建一些任意的父对象,然后通过反射克隆传递的汽车。 提供的唯一构造函数需要一些父对象本身不知道的原始参数。 在这种情况下,如何实例化Car and Truck?谢谢!

1 个答案:

答案 0 :(得分:1)

如果你希望他的实例基于Truck的另一个实例的值Car,那么使用你的构造函数将Car复制到Truck,这个可能看起来像这样:

public Truck(Car car) {
    super(car.getParam());
}

假设getParam存在并返回您想要的值!!

请注意,如果car为空,您将收到RuntimeExceptionNullPointerException),但由于Super需要成为第一个,因此您无法检查言。

嗯,你可以在某些方面,比如使用三元操作:

public Truck(Car car) {
    super(car != null ? car.getParam() : -1);
}

还有其他解决方案,但这不是重点。