java将子类值传递给超类

时间:2014-05-21 05:50:27

标签: java inheritance junit subclass superclass

进行Junit测试,遇到问题。

我有一辆超级车,摩托车和汽车的子类。我需要使用超类中的方法来检索子类中的信息(字符串ID,int arrival)

public class MotorCycle extends Vehicle {

public String bikeID;
public int arrivalTimeA;

public MotorCycle(String vehID, int arrivalTime) throws VehicleException {

    super(bikeID, arrivalTimeA);

    bikeID = vehID;
    arrivalTimeA = arrivalTime;

我正在使用哪个子类,我想使用超类车辆中的方法从摩托车中检索信息

public Vehicle(String vehID,int arrivalTime) throws VehicleException  {

    vehicleID = vehID;
    arrivalTimeA = arrivalTime;

    if (arrivalTime <=0){
        throw new VehicleException("Vehicle");
    }


    public String getVehID() {

    return vehicleID;
}

尝试在子类中使用super(vehID,arrivalTime),但我必须将变量设为静态,这对此程序没有好处。

每当我添加super(vehID,arrivalTime)时,我不断收到错误说“Make variables static”,如果我不这样做,它就会无法正常运行并失败。

我的测试内容是:

    @Test
public void testGetVehID() throws VehicleException {
    moto = new MotorCycle("b1234", 600);
    veh = moto;
    String id = veh.getVehID();
    assertEquals("b1234", id);// TODO
}

veh只是一个空的Vehicle类对象。

我在访问信息时遇到问题。每次运行此测试或类似的测试时,对于int,值为0,对于字符串

,该值为null

2 个答案:

答案 0 :(得分:0)

我认为你想使用构造函数来传递信息而不是方法。 如果你通过这里 {super(vehid,arrivalTime);}

到您的父类,然后它可能会解决您的问题 如果它适合你,请告诉我你。

答案 1 :(得分:0)

我能想到为什么你得到那条指令的唯一原因是,如果你一直试图从子类的构造函数中调用超类的构造函数,那么它不是第一次调用。只要在它之前没有任何代码,使用构造函数的参数调用super()应该很容易。