2013-09-27 135 views
0

雖然這顯然是RTFM的情況,但我無法找到一個簡潔的來源來解釋這一切。公共班級的私人內部班級的可見性

public class Outer { 

    private class Inner { 

    } 

} 

私人Innerinner公共Outer的。

我的問題是關於知名度Inner來自外部'外'。

  1. 我應該能夠在另一個類中實例化Inner嗎?如果是的話,是否有任何限制(例如這個班級在同一個包裹中等)?

  2. 使用集合時,Inner可以用作具體類型嗎?例如,我應該能夠在另一個班級申報ArrayList <Inner>嗎?

  3. 如果另一個類extends OuterInner沿在上述問題方面來嗎?

+1

您不能在外面創建實例,如果有問題的類繼承自頂級類,那麼您可能會有引用,那麼您可以使用內部類的對象,但仍然無法投射它。這個想法是在你自己的班級內部使用它。如果你返回數組,我不確定那是什麼行爲,讓我們試試吧。 – porfiriopartida

+0

從您的內部類聲明中刪除()。 – porfiriopartida

回答

2

這種情況下的「FM」是Java語言規範。你想section 6.6.1,其中包括:

否則,如果成員或構造被聲明爲private,則允許訪問,當且僅當頂層類的體內出現時(第7.6節)包圍的聲明成員或構造函數。

這樣的構造可以的Outer(包括任何其他嵌套類,Outer聲明內)聲明中的任何地方調用,但在其他地方。訪問不會被繼承 - 這與調用構造函數的源代碼是否位於源代碼Outer中一樣簡單。

5

內部是私人的,因此只有它的父母Outer可以對它做任何事情。

+0

就這麼簡單。 –