我对子类有点困惑。 这是我的代码:
public class MedHistory {
private String grafts;
private String allergies;
private String diseases;
private String surgeries;
private String medicalTreatment;
//Constructors (#2)
public MedHistory(String allergies, String diseases, String grafts,
String treatments, String surgeries) {
this.allergies=allergies;
this.diseases=diseases;
this.grafts=grafts;
this.medicalTreatment=treatments;
this.surgeries=surgeries;
}
public MedHistory() {
this.allergies="";
this.diseases="";
this.grafts="";
this.medicalTreatment="";
this.surgeries="";
}
//Getters
public String getGrafts() {
return grafts;
}
public String getAllergies() {
return allergies;
}
public String getDiseases() {
return diseases;
}
public String getSurgeries() {
return surgeries;
}
public String getMedicalTreatment() {
return medicalTreatment;
}
//Setters
public void setGrafts(String grafts) {
this.grafts = grafts;
}
public void setAllergies(String allergies) {
this.allergies = allergies;
}
public void setDiseases(String diseases) {
this.diseases = diseases;
}
public void setSurgeries(String surgeries) {
this.surgeries = surgeries;
}
public void setMedicalTreatment(String medicalTreatment) {
this.medicalTreatment = medicalTreatment;
}
public class FemMedHistory extends MedHistory {
private List<Birth> births = new ArrayList<Birth>();
//Constructors (#2)
public FemMedHistory(String allergies, String diseases, String grafts,String treatments, String surgeries, List<Birth> birthlist) {
super(allergies,allergies,grafts,treatments,surgeries);
this.births=birthlist;
}
public FemMedHistory() {
super();
this.births=null;
}
//Getter
public List<Birth> getBirths() {
return this.births;
}
//Setter
public void setBirths(List<Birth> list) {
this.births=list;
}
}
}
当我尝试创建一个新的FemMedHistory对象时:
List<Birth> list = new ArrayList<Birth>();
list.add(new Birth(new GregorianCalendar(2011,4,10),"kaisariki",4));
FemMedHistory female = new FemMedHistory("allergia2","astheneia2","emvolia2","farmekeutiki agwgi2", "xeirourgeia2", list);
我收到错误:
无法访问MedHistory类型的封闭实例。必须符合资格 使用MedHistory类型的封闭实例进行分配(例如 x.new A()其中x是MedHistory的一个实例。)
那么,这是使用子类的正确方法吗?
答案 0 :(得分:5)
当您声明nested
类时,它只能通过Outer类使用。
要在外部访问它,您需要将FemMedHistory类设为静态。
public static class FemMedHistory extends MedHistory {...}
通过MedHistory类
访问它MedHistory.FemMedHistory myMedHistory = ...
或在其自己的Java文件中声明它。
答案 1 :(得分:3)
您已将子类声明为内部类,这意味着如果不先创建包含类的实例,则无法创建它的实例。
解决这个问题最常见的方法是将它声明为一个单独的类,它可以消除你的错误。
答案 2 :(得分:3)
长话短说:删除所有FemMedHistory
代码并将其粘贴到FemMedHistory.java
。现在你已经涉及到尚未掌握的Java概念。此外,该类确实属于单独的文件。