2017-10-28 81 views
1

我正在學習java中的內部類。我已經看到,如果內部類是非靜態的,那麼它可以輕鬆訪問外部類變量。但是如果內部類是靜態的,那麼如何使用靜態的類對象來訪問外部類的變量呢?如何使用內部靜態類對象訪問外部類變量

下面是我的代碼,其中是從內部類訪問外部類變量

package org; 

public class Outerclass { 

    String name = "Europe"; 

    public String getname() { 

     return name; 
    } 

    public void setname(String name) { 

     this.name = name; 
     System.out.println(this.name); 
    } 

    static class innerclass { 

     void updatename() { 
      Outerclass o = new Outerclass(); 
      o.setname("USA"); 
     } 

    } 

    public static void main(String[] args) { 
     Outerclass b = new Outerclass(); 
     b.name; // why this error here ? "Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration" 

     innerclass i = new innerclass(); 
     i.updatename(); 

    } 

} 
+2

而不是向我們展示*如何*你試圖做些什麼(和失敗)爲什麼你不解釋*你試圖達到什麼樣的目標? – alfasin

回答

2

您不能訪問靜態內容

內非靜態的內容,當我們創建默認靜態內部類它將創建爲外部模板作爲內部模板的關聯。所以我們可以加載在一起,但只有靜態的東西可以在靜態的內部類中。

現在這些類的對象之間沒有連接。但是模板之間有聯繫。

以下是你的代碼中,我已經做了一些修改可能會幫助你

public class Demo { 

    String name = "Europe"; 

    public String getname() { 

     return name; 
    } 

    public void setname(String name) { 

     this.name = name; 
     System.out.println(this.name); 
    } 

    static class innerclass { 

     void updatename() { 
      Demo o = new Demo(); 
      o.setname("USA"); 
     } 

    } 

    public static void main(String[] args) { 
     Demo b = new Demo(); 
     String a = b.name; // why this error here ? "Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration" 

     System.out.println(a); 

     innerclass i = new innerclass(); 
     i.updatename(); 

    } 

} 
+0

如果外部類的變量是靜態的,該怎麼辦? – Javastudent

+0

等待我正在編輯我的回答詳情 –

+0

可以訪問靜態東西 –

0

內部靜態類 behives一樣正常類:

  • 可以訪問外部類
  • 的靜態屬性/方法
  • 不能直接訪問outre類的非訪問靜態/方法,它們將需要一個外部類實例引用來執行此操作。
  • 它不主要是在兩種情況 rquire要創建

它用於外部類的一個實例:

  • 要創建一組具有類似性質/功能類,並且要將它們放在一個'Napespace'
  • 中,您希望創建一個不會被任何人看到的私有類,除了類(私有靜態內部類)外。這樣您就可以創建僅可用於外部類的接口實現。

非靜態內部類:

  • 它需要外部類的實例被創建
  • 它可以訪問的方法和外類的屬性。

Quote

...內部類可以訪問聲明類的所有成員,甚至 私有成員。實際上,內部班級本身據說是該班級的一名成員 ;因此,遵循面向對象的規則 工程,它應該有權訪問該類的所有成員。

+0

如果外部類的變量是靜態的呢? – Javastudent

+0

您可以訪問它們 – Beri

+0

@Beri關於'無法直接訪問outre類的靜態/方法,它們將需要外部實例引用來執行此操作。我認爲你可以在沒有外部類的實例的情況下訪問靜態方法。 –