2016-05-16 66 views
0

我們說嵌套類是成員的封閉類。封閉類的每個實例是否都有自己的內部/非靜態嵌套類的副本?

這是否意味着封閉類的每個實例都有自己的一個(n)的副本內/非靜態嵌套類,就像一個類的每個實例都有自己的非靜態/實例方法的副本?


我的問題是不是在我的上述問題的旗幟掛在question的副本。

這個問題討論了內部類是否自動保持對封閉類的引用(即使從未使用過引用)。

我的問題是,由於一類的所有實例都非靜態成員領域的自身拷貝(和方法? - 我不知道的方法) - 相對的是隻有一個副本可用靜態成員對班級的所有事例;因爲我們說嵌套類是成員的封閉類,然後內部類將變成非靜態/實例成員的封閉類,對吧?

那麼可以得出結論:封閉類的每個實例都有其每個內部類的副本嗎?

我甚至沒有發現兩個問題是相似的,更不用說重複了。我真的很想知道我的問題的哪一部分涉及到一個內部類的封閉類的引用。

我的問題在接受的答案中得到了精確的回答。

+3

爲什麼不簡單地嘗試一下呢? – Turing85

+1

「就像類的每個實例都有自己的非靜態/實例方法副本一樣?」但他們沒有。 – Kayaman

+1

[單個]封閉類可以有*多個*內部類:這些多重性意味着什麼? – user2864740

回答

3

我從你給出的描述中創建了一個小例子。如果我沒有正確理解你,請糾正我,但這是我從你的描述中讀出來的。

public class Outer { 
    class Inner { 

    } 

    public Inner inner = new Inner(); 

    public static void main(String... args) { 
     Outer o1 = new Outer(); 
     Outer o2 = new Outer(); 

     System.out.println(o1.inner == o2.inner); 
     System.out.println(o1.inner.getClass() == o2.inner.getClass()); 
    } 

} 

當你執行程序時,您可能會看到的Inner的情況下是不相等的,但是內實例的類。希望這會回答你的問題。

+0

從這我可以得出結論,_inner-class_對於每個封閉類的實例總是相同的;但封閉類的每個實例都有自己的_every內部類的實例副本 - 是否正確? – Solace

+1

是的,這是正確的。 – Turing85

+0

非常感謝你,當你說「爲什麼不簡單地試一試」(你就是爲什麼我把這個評論提高了),你是對的,但是根本沒有發生這樣的檢查。我還沒有學習反射(getClass())。 – Solace

0

這是否意味着包圍類的每個實例都具有其自己的一(n)的拷貝內/非穩態嵌套類,

封閉類的每個實例可以由零個或引用內部類的更多實例。

內部類的每個實例都對包含類的一個實例有一個隱式引用。

順便說一句,內部類是一個未聲明爲靜態的嵌套類。 「內部類」包括匿名和非靜態嵌套類。

+0

@vaxquis - 這是對我早先較爲寬鬆的語言的有效批評。外部實例不隱式連接到內部實例。使用動詞「有」意味着「被引用」是有點延伸。 –

+0

@AndyThomas它*是*伸展,真實。儘管如此,它們隱式地連接在參考圖(GC等)中,但我當然同意你不能簡單地獲得所有內部實例[沒有沉重的虛擬機魔法](http://docs.oracle.com/javase/) 1.5.0/docs/guide/jvmti/jvmti.html#IterateOverInstancesOfClass)或沒有某種明確的跟蹤。 – vaxquis

相關問題