2013-04-08 71 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

相關問題