2013-04-08 75 views
0

我正在学习Java中的抽象类,并且此错误有一点问题: 没有可以访问zad_II_1类型的封闭实例。必须使用封闭的zad_II_1类型实例(例如x.new A(),其中x是zad_II_1的一个实例)限定分配。 我做错了什么? 这是代码:错误:没有可以访问类型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" 
           ); 
      } 

      } 
} 
+1

这是一个可怕的类名。不要从这样的坏习惯开始。并阅读内部类。 – 2013-04-08 19:59:49

+0

这是我学习练习的一个特别的关键..但是谢谢! :) – Blackchart 2013-04-08 20:12:48

回答

0

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

static abstract class Pacjent 

static class ChoryNaGlowe extends Pacjen 

等等

+0

它的工作原理!谢谢Xavier Delamotte!我必须读更多关于静态类的smt ... – Blackchart 2013-04-08 20:08:12

0

你可以让你的内部类static,当然。

或者,你需要有zad_II_1实例创建内部类:

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

它的工作原理!谢谢MPi。 – Blackchart 2013-04-08 20:08:38

0

或者你可以将所有的东西的主要方法,因为使用了“新的内部类实例”调用非常混乱。

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

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

+0

好的,我试试!谢谢你的帮助 :) – Blackchart 2013-04-09 18:17:58

相关问题