我有四个班级: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的行引发了编译器错误。消息是:
停车票类中的构造函数ParkingTicket不能应用于给定类型;
需要:ParkedCar
找到:停放的汽车,警察办公室
原因:实际和正式论点清单的长度不同
我很困惑,因为它应该调用第一个重载的构造函数,该构造函数以ParkedCar和PoliceOfficer作为参数。我不确定为什么要说它只接受ParkedCar的一个论点。如果我仅将ParkedCar对象作为参数传递,则可以正常编译,但是我知道这是不正确的,因为我没有将所需的PoliceOfficer信息传递给ParkingTicket对象。
有任何想法吗?感谢任何帮助。
最佳答案
我将答案放在这里,因为我显然在评论中回答了它。
错误消息说它只需要一个ParkedCar参数。您显示的单个参数构造函数具有不同的类型,因此这不是重载问题。
由于期望的参数只是您期望的部分列表,因此它可能是过时的.class
文件。重新编译类,它应该可以工作。