我有四个班级: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文件。重新编译类,它应该可以工作。

10-05 21:27