2017-04-02 1 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 = new outer.inner();インナーは静的ではないからです。

+1

Javaの命名規則に従ってください。 –

+0

その先のことを試しましたか? – GhostCat

答えて

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

したがって、最初の部分outer.innerは、あなたが言ったように戻り値の型です。

第2に、oは、内部オブジェクトを含む外部オブジェクトへの参照です。外部オブジェクトへの参照がある場合にのみ内部オブジェクトにアクセスします。今すぐo. new inner() ;は、単にオブジェクトoに行き、タイプinnerのオブジェクトを作成します。

-1

内部クラスが非包含クラスの特定のインスタンスにバインドされているという問題があります。 、outer.inner y = o.new inner()が起こっている何が

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

innerstaticではないので、それがインスタンス化されるouterを必要とし、その構文が隠されouterを渡すために使用される:クラス定義が隠された基準部材を持っている場合、それは一種の、ようなものですインスタンスへの参照。

Innerstaticになる場合は、もう適格なインスタンスは必要ありません。外側クラスの名前で十分です(例:new Outer.Inner())。

+0

'Inner'が' static'の場合、内部クラスではないので、クラス名は紛らわしく混乱します。 –

+0

@LewBloch:これは単なる専門用語ですが、代わりにネストされたクラスになりますが、これは単なる洗練です。静的なキーワードが既にそれをしているときになぜ彼らは内部をネストから分離しなければならなかったのかわかりません。 – Jack

+1

あなたの個人的な意見や敬意を表しているものは、Javaの内部クラスは静的でないネストされたクラスであるという事実(!)です。それは「洗練」ではなく、Java言語仕様です。私はあなたにあなたの意見を聞くことを勧めます、@ジャック、そして事実を処理してください。 –

関連する問題