我有两个具有聚合关系的类。当我从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手动输入参数值,它将进行编译。任何建议和指导将不胜感激。如前所述,如果发布课程的其余代码将有所帮助,我很乐意这样做。
答案 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错误