在Java中声明嵌套类
我对子类有点困惑。 这是我的密码:在Java中声明嵌套类,java,inheritance,declaration,nested-class,Java,Inheritance,Declaration,Nested Class,我对子类有点困惑。 这是我的密码: public class MedHistory { private String grafts; private String allergies; private String diseases; private String surgeries; private String medicalTreatment; //Constructors (#2) public MedHistory(Stri
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;
}
}
}
公共类历史记录{
私有线移植物;
私人字符串过敏;
私人疾病;
私人字符串手术;
私人医疗;
//施工人员(#2)
公共医疗史(弦过敏、弦疾病、弦移植物、,
字符串治疗、字符串手术){
这个。过敏=过敏;
疾病=疾病;
这个。移植物=移植物;
这个。药物治疗=治疗;
这个。手术=手术;
}
公共医学史(){
这是“过敏”;
这是“疾病”;
这个。grafts=“”;
本.药物治疗=”;
这是“手术”;
}
//吸气剂
公共字符串getGrafts(){
回植;
}
公共字符串getAllergies(){
返回过敏;
}
公共字符串{
返回疾病;
}
公开手术(){
返回手术;
}
公共字符串getMedicalTreatment(){
返回药物治疗;
}
//二传手
公共无效集合移植物(字符串移植物){
this.grafts=移植物;
}
公众过敏(字符串过敏){
这个。过敏=过敏;
}
公共疾病(字符串疾病){
疾病=疾病;
}
公共外科手术(字符串手术){
这个。手术=手术;
}
public void setMedicalTreatment(字符串medicalTreatment){
this.medicalTreatment=medicalTreatment;
}
公共类FemMedHistory扩展了MedHistory{
私有列表=新的ArrayList();
//施工人员(#2)
公共女性病史(字符串过敏、字符串疾病、字符串移植、字符串治疗、字符串手术、列表出生名单){
超级(过敏、过敏、移植、治疗、手术);
这个。出生=出生名单;
}
公共历史(){
超级();
这个。出生=零;
}
//吸气剂
公众名单{
把这个还给我;
}
//塞特
公共无效设置(列表){
这个.出生=名单;
}
}
}
当我尝试创建新的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);
List List=new ArrayList();
列表。添加(新出生(新格雷戈里安卡伦达(2011,4,10),“kaisariki”,4);
女性病史女性=新的女性病史(“过敏史”、“虚弱史”、“埃姆沃利史”、“Farmekutiki agwgi2”、“xeirourgeia2”,列表);
我得到一个错误:
无法访问MedHistory类型的封闭实例。必须符合条件
包含MedHistory类型实例的分配(例如。
x、 新建A(),其中x是MedHistory的实例)
那么,使用子类的正确方法是什么?您已将子类声明为内部类,这意味着您必须先创建包含类的实例,才能创建它的实例
解决这个问题最常用的方法是将它声明为一个单独的类,这将消除您的错误。当您声明一个
嵌套的
类时,它只能通过外部类使用
要在外部访问它,您需要将FemMedHistory类设置为静态
public static class FemMedHistory extends MedHistory {...}
通过MedHistory类访问它
MedHistory.FemMedHistory myMedHistory = ...
或者在它自己的Java文件中声明它。长话短说:剪切所有
FemMedHistory
代码,并将其粘贴到FemMedHistory.Java
。现在,您已经涉及到了尚未掌握的Java概念。另外,该类确实属于一个单独的文件。查看静态内部类。其他有用的阅读:我会的,谢谢你的参考。可能的重复我无法更改文件,所以你能简单地告诉我使FemMedHistory成为一个静态类的缺点是什么吗?说实话,它稍微扰乱了全局命名空间,在这种情况下,您需要它,因为它实际上是一个通常在它自己的文件中定义的类。通常,如果您在另一个类中创建一个类,那是因为您并不真正关心java文件之外的那个类。本质上,它们通常是实用程序类,与程序的其余部分无关。但这里显然不是这样。