构造函数发出传递具有聚合关系的参数的问题

时间:2016-12-11 04:51:40

标签: java

我有两个具有聚合关系的类。当我从main实例化一个对象时,它不会在其中一个类中初始化。但是,如果我手动输入我尝试在main中传递的值,它会编译。这是字段和构造函数。如果您认为我需要发布剩下的代码,我会的。我不知道我是否只是失明。仅供参考,我是初学者,所以如果我的术语不好,我会提前道歉。

主:

public class Test
{
   public static void main(String[] args)
   {
      Patient person = new Patient("Please", "Helpme", "01/01/2016", "Broncos", "Insurance of Broncos");
      Treatment treatment1 = new Treatment("08/4/2015", "1:00", "1:20", person3);
   }
}

班级待遇:这就是问题所在。它是" person = new Patient(aPerson);"。

public class Treatment
{
   private Date treatmentDate;
   private Time startTime;
   private Time endTime;
   private Patient person; 

   public Treatment(String aDate, String sTime, String eTime, Patient aPerson)
   {
      treatmentDate = new Date(aDate);
      startTime = new Time(sTime);
      endTime = new Time(eTime); 
      person = new Patient(aPerson);
   }

班级病人:

public class Patient extends Person
{
   final private int NUM = 10;
   private String employer;
   private String InsuranceCompany;
   private int treatmentCount = 0;
   private String[] a1 = new String[NUM];
   public Patient(String aFName, String aLName, String aDate, String anEmployer, String anInsurranceCompany)
   {
      super(aFName, aLName, aDate);
      String firstName = aFName;
      employer = anEmployer;
      InsuranceCompany = anInsurranceCompany;  
   }

以下是我收到的错误消息:

---- jGRASP exec:javac -g Treatment.java Treatment.java:20:错误:构造函数类患者不能应用于给定类型;       person = new Patient(aPerson);                ^   required:String,String,String,String,String   发现:病人   原因:实际和正式的参数列表长度不同 1错误

---- jGRASP wedge2:进程的退出代码为1。  ---- jGRASP:操作完成。

现在,如果我转到Treatment类并从main手动输入参数值,它将进行编译。任何建议和指导将不胜感激。如前所述,如果发布课程的其余代码将有所帮助,我很乐意这样做。

2 个答案:

答案 0 :(得分:1)

听起来你忘了将构造函数定义为Patient(Patient p)?尝试将此添加到您的患者类:

public Patient(Patient p) {
  this(p.fName, p.lName, p.date, p.employer, p.InsuranceCompany);
}

此外,您需要从Person受保护的前3个值或使用getter方法

public class Patient extends Person {

final private int NUM = 10;
private String employer;
private String InsuranceCompany;
private final int treatmentCount = 0;
private final String[] a1 = new String[NUM];

public Patient(String aFName, String aLName, String aDate) {
    super(aFName, aLName, aDate);
}

public Patient(String aFName, String aLName, String aDate, String anEmployer, String anInsurranceCompany) {
    super(aFName, aLName, aDate);
    String firstName = aFName;
    employer = anEmployer;
    InsuranceCompany = anInsurranceCompany;
}

public Patient(Patient p) {
    this(p.fName, p.lName, p.date, p.employer, p.InsuranceCompany);
}
}

和班人:

public class Person {

protected String fName;
protected String lName;
protected String date;

public Person(String aFName, String aLName, String aDate) {
    fName = aFName;
    lName = aLName;
    date = aDate;
}
}

答案 1 :(得分:0)

您正在调用一个不存在的构造函数:

person = new Patient(aPerson); // this is a call to Patient(String arg) constructor


Patient(Patient patient) {
     // do something here
}

或者用另一种方式将它与当前代码一起使用

person = new Patient(String aFName, String aLName, String aDate, String anEmployer, 
             String anInsurranceCompany); // where you need to initialise(define) all these args as well.

这也是编译器所说的 -

  

必填:String,String,String,String,String 找到:Patient原因:   实际和正式参数列表的长度不同 1错误