Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中声明嵌套类_Java_Inheritance_Declaration_Nested Class - Fatal编程技术网

在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文件之外的那个类。本质上,它们通常是实用程序类,与程序的其余部分无关。但这里显然不是这样。