2015-01-01 99 views
-4

我正在學習關於JAVA的內部類,但我編寫這段代碼,當我編譯它時,我得到這個錯誤: Error:(84, 23) java: non-static variable this cannot be referenced from a static context關於JAVA的內部類

public class Main { 

    class Outer { 
     private String string; 

     Outer(String s) { 
      this.string = s; 
     } 

     public Inner inner() { 
      return new Inner(); 
     } 

     class Inner { 
      @Override 
      public String toString() { 
       return string; 
      } 
     } 
    } 

    public static void main(String[] args) { 
     Outer outer = new Outer("yang"); 
     // System.out.println(outer.inner().toString()); 
    } 
} 

我已經更新了內部類到這,它的工作原理。

public class Main { 

    static class Outer { 
     private String string; 

     Outer(String s) { 
      this.string = s; 
     } 

     public Inner inner() { 
      return new Inner(); 
     } 

     class Inner { 
      @Override 
      public String toString() { 
       return string; 
      } 
     } 
    } 
    public Outer outer(String s){ 
     return new Outer(s); 
    } 
    public static void main(String[] args) { 
     // Main main = new Main(); 
     Outer outer = new Outer("YANG"); 
     System.out.println(outer.inner().toString()); 
    } 
} 
+0

'的System.out.println(outer.inner()的toString());'你去除評論後收到錯誤這條線? –

+0

不,錯誤位於'外部外=新外(「楊」);' – BlackMamba

+0

作爲「外部類」實例的對象存在於Main類的一個實例中。所以你需要創建Main類的實例來訪問'Outer class'。 – iMBMT

回答

5

儘管它的名字,Outer本身是一個內部類,因而不能無Main實例來構造。您需要:

Outer outer = new Main().new Outer("yang"); 
1

兩個OuterInner是內部類。要訪問它們,你必須實例化主類,然後你應該實例化內部類。

所以,你的代碼將

Outer outer = new Main().new Outer("Yang"); 

而且refer to this