Аб'яву ўкладзенага класа ў Java

Я крыху заблытаўся з падкласаў. Вось мой код:

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 births = new ArrayList();

        //Constructors (#2)

        public FemMedHistory(String allergies, String diseases, String grafts,String treatments, String surgeries, List birthlist) {
            super(allergies,allergies,grafts,treatments,surgeries);
            this.births=birthlist;
        }

        public FemMedHistory() {
            super();
            this.births=null;
        }

        //Getter

        public List getBirths() {
            return this.births;

        }

        //Setter

        public void setBirths(List list) {
            this.births=list;
        }

    }
}

Калі я спрабую стварыць новы FemMedHistory аб'ект накшталт гэтага:

List list = new ArrayList();
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 А() дзе х ўяўляе сабой асобнік MedHistory). </р>

Так, што гэта правільны шлях, каб выкарыстоўваць падклас?

2
Праверце статычныя ўнутраныя класы.
дададзена аўтар Sotirios Delimanolis, крыніца
Я буду, дзякуй за спасылкі.
дададзена аўтар LePhleg, крыніца
Я буду, дзякуй за спасылкі.
дададзена аўтар LePhleg, крыніца
дададзена аўтар fabian, крыніца
дададзена аўтар fabian, крыніца
Дадатковая карысная літаратура: Укладзеныя класы
дададзена аўтар informatik01, крыніца
Дадатковая карысная літаратура: Укладзеныя класы
дададзена аўтар informatik01, крыніца

7 адказы

Пры абвяшчэнні ўкладзены клас ён даступны толькі праз знешні клас.

Для доступу да яго звонку, вам трэба будзе альбо зрабіць FemMedHistory класа статычным.

public static class FemMedHistory extends MedHistory {...}

доступ да яго праз MedHistory класа

MedHistory.FemMedHistory myMedHistory = ...

ці абвясціць яго ў яго ўласным файле Java.

5
дададзена
Я не магу змяніць файлы, так што вы можаце сказаць мне сцісла, што было б мінусы зрабіць FemMedHistory статычнага класа?
дададзена аўтар LePhleg, крыніца
Я бачу .. дзякуй за чысцячы гэта!
дададзена аўтар LePhleg, крыніца
Не вельмі сумленна, гэта загрувашчвае глабальнае прастору імёнаў трохі, што ў гэтым выпадку вы хочаце, як гэта сапраўды клас, які, як правіла, вызначаюць у яго ўласным файле. Звычайна, калі вы зробіце клас ўнутры іншага класа, гэта таму, што вы на самай справе не клапаціцца аб тым, што ўнутры класа за межамі гэтага Java-файла. Па сутнасці яны, як правіла, класы карыснасці, якія не маюць ніякага дачынення да астатняй часткі праграмы. Але гэта відавочна не той выпадак.
дададзена аўтар greedybuddha, крыніца

Пры абвяшчэнні ўкладзены клас ён даступны толькі праз знешні клас.

Для доступу да яго звонку, вам трэба будзе альбо зрабіць FemMedHistory класа статычным.

public static class FemMedHistory extends MedHistory {...}

доступ да яго праз MedHistory класа

MedHistory.FemMedHistory myMedHistory = ...

ці абвясціць яго ў яго ўласным файле Java.

5
дададзена
Я не магу змяніць файлы, так што вы можаце сказаць мне сцісла, што было б мінусы зрабіць FemMedHistory статычнага класа?
дададзена аўтар LePhleg, крыніца
Я бачу .. дзякуй за чысцячы гэта!
дададзена аўтар LePhleg, крыніца
Не вельмі сумленна, гэта загрувашчвае глабальнае прастору імёнаў трохі, што ў гэтым выпадку вы хочаце, як гэта сапраўды клас, які, як правіла, вызначаюць у яго ўласным файле. Звычайна, калі вы зробіце клас ўнутры іншага класа, гэта таму, што вы на самай справе не клапаціцца аб тым, што ўнутры класа за межамі гэтага Java-файла. Па сутнасці яны, як правіла, класы карыснасці, якія не маюць ніякага дачынення да астатняй часткі праграмы. Але гэта відавочна не той выпадак.
дададзена аўтар greedybuddha, крыніца

Карацей кажучы: выразаць усе FemMedHistory код і ўстаўце яго ў FemMedHistory.java . Як гэта цяпер вы пацягнуўшыя Java канцэпцыі, якія вы яшчэ не асвоеныя. Акрамя таго, гэты клас сапраўды належыць у асобным файле.

3
дададзена

Карацей кажучы: выразаць усе FemMedHistory код і ўстаўце яго ў FemMedHistory.java . Як гэта цяпер вы пацягнуўшыя Java канцэпцыі, якія вы яшчэ не асвоеныя. Акрамя таго, гэты клас сапраўды належыць у асобным файле.

3
дададзена

Вы абвясцілі свой падклас як ўнутраны клас , што азначае, што вы не можаце стварыць экзэмпляр гэтага без стварэння асобніка класа, які змяшчае.

Найбольш распаўсюджаны спосаб вырашыць гэта, каб аб'явіць яго як асобны клас, які б пазбавіцца ад вашай памылкі.

3
дададзена

Вы абвясцілі свой падклас як ўнутраны клас , што азначае, што вы не можаце стварыць экзэмпляр гэтага без стварэння асобніка класа, які змяшчае.

Найбольш распаўсюджаны спосаб вырашыць гэта, каб аб'явіць яго як асобны клас, які б пазбавіцца ад вашай памылкі.

3
дададзена

Вы абвясцілі свой падклас як ўнутраны клас , што азначае, што вы не можаце стварыць экзэмпляр гэтага без стварэння асобніка класа, які змяшчае.

Найбольш распаўсюджаны спосаб вырашыць гэта, каб аб'явіць яго як асобны клас, які б пазбавіцца ад вашай памылкі.

3
дададзена