2017-04-02 110 views
2

我沒有找到我在我搜索問題答案的對象時,瞭解部分的邏輯來賦值運算符的右側,這就是爲什麼我問它。無法創建內部類

class outer 
{ 
class inner // non static . 
{ 
} 
} 

For creating object of inner class I am unable to understand the logic of the part to the right of assignment operator . 

outer o = new outer() ; 
outer.inner y = o. new inner() ; // I have doubt in this line . 

這裏的outer.inner是返回類型,但是正確的部分呢?

件事我知道: 我們不能寫outer.inner Y =新outer.inner();因爲內在是非靜態的。

+1

請堅持到Java命名約定。 –

+0

試過先前的研究的事情? – GhostCat

回答

0
outer o = new outer() ; 
outer.inner y = o. new inner() ; 

因此,第一部分outer.inner是你所說的返回類型。

其次,o是對包含內部對象的外部對象的引用,如果您具有對外部對象的引用,則只會訪問內部對象。現在o. new inner() ;只是說「進入對象o,然後創建inner類型的對象」。

-1

的問題是,非static內部類結合到包含類的特定實例。這就像如果類定義有一個隱藏的參考成員,排序的:

class Outer { 
    class Inner { 
    private final Outer outer; 
    Inner(Outer outer) { this.outer = outer; } 
    } 
} 

這就是正在發生的事情outer.inner y = o.new inner(),因爲inner不是static它需要被實例化的outer和語法用於傳遞隱藏outer參考實例。

如果Inner變得static那麼它並不需要一個合格的實例了,外部類的名字就足夠了,如:new Outer.Inner()

+0

如果'Inner'是'static',它不會是一個內部類,因此這個類的名稱將會變得毫無希望地混淆。 –

+0

@LewBloch:這只是術語,它將是一個嵌套類,但這只是一種詭辯。我不知道爲什麼當static關鍵字已經做到這一點時,他們必須將內部和嵌套分開。 – Jack

+1

無論您的個人意見或您應用的pejoratives,事實(!)是Java中的內部類是不是「靜態」的嵌套類。這不是一種「詭辯」,這是Java語言規範。我建議你接過你的意見@Jack,並處理事實。 –

相關問題