2013-12-12 63 views
2

請原諒我,如果這個問題是愚蠢的,因爲我是完全陌生的JAVA程序。我正在研究嵌套類的概念,並遇到以下程序。從不同的類呼叫內部類成員

// Demonstrate an inner class. 
class Outer { 
    int outer_x = 100; 
    void test() { 
     Inner inner = new Inner(); 
     inner.display(); 
    } 
    // this is an inner class 
    class Inner { 
     void display() { 
      System.out.println("Display: outer_x = " + outer_x); 
     } 
    } 
} 
class NestedClass { 
    public static void main(String args[]) { 
     Outer outer = new Outer(); 
     outer.test(); 

//  Inner inner = new Outer().Inner(); 
//  inner.display(); 
    } 
} 

而我的疑問是如何從NestedClass訪問Inner類的成員。在「Java - 完整的參考」中,給出了"You can, however, create an instance of Inner outside of Outer by qualifying its name with Outer, as in Outer.Inner"。但是,如果我嘗試使用它作爲,

 Inner inner = new Outer().Inner(); 
     inner.display(); 

它是拋出錯誤。所以請幫助我的專家。

回答

5

您需要使用new關鍵字創建新的Inner實例。

Inner inner = new Outer().new Inner(); // "new" keyword is required to create a new Inner instance. 

如果您沒有爲import com.java.test.Outer.Inner;添加導入,請添加它。否則,你可以做這樣的事情

Outer.Inner inner = new Outer().new Inner(); 
+0

它顯示錯誤「內部解決不了的類型」 – Stranger

+0

@Udhay - 你有'進口com.java.test.Outer.Inner;'添加import語句?如果不是,請添加導入或使用'Outer.Inner'。 – SudoRahul

+0

它的工作原理。大! – Stranger

1

使用此:

Outer.Inner inner=new Outer().new Inner(); 

,因爲你需要創建內部類的對象太多,因爲它不是靜態內部類。

所以,你的代碼就變成了:

class NestedClass { 
public static void main(String args[]) { 
    Outer outer = new Outer(); 
    outer.test(); 

    Outer.Inner inner = outer.new Inner(); 
    inner.display(); 
} 
} 
1

Inner class只能通過live instance of outer class進行訪問。

嘗試這種情況:

class NestedClass { 
public static void main(String args[]) { 
    Outer outer = new Outer(); 
    outer.test(); 

    Outer.Inner inner = outer.new Inner(); 
    inner.display(); 
} 

}

3
Outer st = new Outer(); 
    Outer.Inner fl = st.new Inner(); 

注意,上面的代碼將是完全一樣main()方法是否是outer class內(因爲主要是一個靜態方法)甚至在其他一些班級。其他一些類只能訪問外部類才能運行代碼。但是,外部類將具有默認或程序包訪問,因爲在聲明外部類時未指定訪問修飾符。這基本上意味着與OuterClass相同的包中的任何類將能夠運行上面的代碼而沒有任何問題。

2

您首先必須創建外部類的實例。之後,您可以通過外部類的實例創建嵌套內部類的實例。

Outer outer = new Outer(); 
Outer.Inner a = outer. new Inner(); 
a.display();