我有四个班:ParkedCar,ParkingMeter,ParkingTicket和PoliceOfficer。 PoliceOfficer类应该“发出一张票”,即如果一辆汽车停放的时间超过应有的长度,则创建一个新的ParkingTicket对象。 ParkingTicket对象具有ParkedCar对象和PoliceOfficer对象作为成员对象(基本上包含车辆获取票证的信息的对象,以及发布人员)。下面是我的ParkingTicket类的构造函数,我正在尝试使用第一个创建ParkingTicket。
来自ParkingTicket课程:
public ParkingTicket(ParkedCar parkedCarObj, PoliceOfficer officerObj){
this.car = new ParkedCar(parkedCarObj);
this.officer = new PoliceOfficer(officerObj);
}
//Copy constructor, makes new instance a copy of object passed as argument
public ParkingTicket(ParkingTicket obj2){
this.car = new ParkedCar(obj2.car);
this.officer = new PoliceOfficer(obj2.officer);
}
我在PoliceOfficer课程中发出票证的方法如下。如果我需要发出票证,我会尝试将ParkedObject和自我PoliceOfficer对象(使用this
)传递给ParkingTicket构造函数,如下所示。
来自PoliceOfficer类:
public boolean issueTicket(ParkedCar car, ParkingMeter meter){
boolean expired = false;
if (car.getMinsParked() > meter.getMinsPurchased()){
expired = true;
ParkingTicket ticket = new ParkingTicket(car, this); //Compiler error
}
return expired;
}
但是,我实例化新ParkingTicket的行会引发编译器错误。消息是:
类ParkingLicket中的构造函数ParkingTicket不能应用于给定类型;
必需:ParkedCar
发现:ParkedCar,PoliceOfficer
原因:实际和正式的参数列表长度不同
我很困惑,因为它应该调用第一个重载的构造函数,它将ParkedCar和PoliceOfficer作为参数。我不确定为什么说它只应该采用ParkedCar的一个参数。如果我只传递一个ParkedCar对象作为参数,它编译得很好,但我知道这是不正确的,因为我没有将所需的PoliceOfficer信息传递给ParkingTicket对象。
有什么想法吗?感谢任何帮助。
答案 0 :(得分:1)
我会把答案放在这里,因为我在评论中显然已经回答了。
错误消息表明它只需要一个ParkedCar参数。您显示的单个参数构造函数具有不同的类型,因此它不是过载问题。
由于预期参数是您预期的部分列表,因此它可能是陈旧的.class
文件。重新编译类,它应该工作。