错误:无法访问类型为zad_II_1的封闭实例

时间:2013-04-08 19:58:00

标签: java

我正在学习Java中的抽象类,我对这个错误有点问题: 不能访问类型为zad_II_1的封闭实例。必须使用zad_II_1类型的封闭实例限定分配(例如x.new A(),其中x是zad_II_1的实例)。 我做错了什么? 这是代码:

public class zad_II_1 {

    abstract class Pacjent{
            String imie;

            Pacjent(String imie){
            this.imie=imie;
            }

            abstract String nazwiskoo();
            abstract String PodajChorobe();
            abstract String PodajLek();

            String nazwisko(){
                return imie;
            }
            String choroba(){
                return PodajChorobe();
            }
            String leczenie(){
                return PodajLek();
            }
            }


     class ChoryNaGlowe extends Pacjent{
         ChoryNaGlowe(String imie){
             super(imie);}
             String nazwiskoo(){
                 return imie;
             }
             String PodajChorobe(){return "glowa";}
             String PodajLek(){return "aspiryna";}
     }
    class ChoryNaNoge extends Pacjent{
         ChoryNaNoge(String imie){
             super(imie);}
             String nazwiskoo(){
                 return imie;
             }  
             String PodajChorobe(){return "noga";}
             String PodajLek(){return "gips";}
    }
    class ChoryNaDyspepsje extends Pacjent{
         ChoryNaDyspepsje(String imie){
             super(imie);}
             String nazwiskoo(){
                 return imie;
             }   
             String PodajChorobe(){return "dyspepsja";}
             String PodajLek(){return "wegiel";}
        }





        public static void main(String[] args) {

            Pacjent[] pacjenci = { new ChoryNaGlowe("Janek"),
                                   new ChoryNaNoge("Edzio"),
                                   new ChoryNaDyspepsje("Marian")
                                 };

            for (Pacjent p : pacjenci) {
              System.out.println("Pacjent:      " + p.nazwisko() + '\n' + 
                                "Chory na:    " + p.choroba() + '\n' +
                                "Zastosowano: " + p.leczenie() +"\n\n" 
                                 );
            }

          }
}

3 个答案:

答案 0 :(得分:0)

你所有的内在阶级都需要是静态的。

static abstract class Pacjent

static class ChoryNaGlowe extends Pacjen

等...

答案 1 :(得分:0)

当然,您可以制作内部课程static

或者,您需要有zad_II_1的实例来创建内部类:

zad_II_1 z = new zad_II_1();
z.new ChoryNaGlowe("Janek")

答案 2 :(得分:0)

或者您可以将所有内容移出main方法,因为使用“new inner class instance”调用非常混乱。

public main(String... args) {
    zad_II_1 z = new zad_II_1();
    z.doExercise();
}
private void doExercise() {
    // copied from the old main().
    // Just use new CherryNaGlowe(...), etc.
}

通常,尽可能尝试使用静态内部类。有时人们会长时间将内部类存储在其他对象中。如果系统可以访问内部类,则外部类也是自动的,这是泄漏内存的一种方法。