-1

我正在学习 Java 中的抽象类,但我对这个错误有一点问题:没有可访问类型 zad_II_1 的封闭实例。必须使用 zad_II_1 类型的封闭实例来限定分配(例如 xnew 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" 
                                 );
            }

          }
}
4

3 回答 3

0

你所有的内部类都需要是静态的。

static abstract class Pacjent

static class ChoryNaGlowe extends Pacjen

ETC...

于 2013-04-08T20:01:10.740 回答
0

当然,您可以创建内部类static

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

zad_II_1 z = new zad_II_1();
z.new ChoryNaGlowe("Janek")
于 2013-04-08T20:03:18.350 回答
0

或者您可以将所有内容移出 main 方法,因为使用“新内部类实例”调用非常混乱。

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.
}

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

于 2013-04-08T21:51:12.167 回答