2017-01-30 4 views
0

以下のクラスがありますが、内部クラスのオブジェクトを作成しますが、内部クラスのオブジェクトを作成するのは疑いがあります。オブジェクトの作成中に静的な内部クラスの参照を与える方法は?

class parent{ 

    String name; 

    public static class inner { 
     String name; 
    } 
} 

class Main { 
    parent p = new parent(); 
    parent.inner in = new inner() //when do i have to create like this? 
    parent.inner in = new Parent.inner() //when do i have to create like this? 

} 

私は内部クラスのオブジェクトを作成する2つの方法を作成しましたが、それらの違いは何ですか?どちらが正しいか?

どちらも正しい場合は、上記のように作成する必要がありますか?

+0

ます。https:/ /docs.oracle.com/javase/tutorial/java/javaOO/nested.html – Benjamin

+0

名前の競合がある場合や、外部クラスのみをインポートする場合は、2番目の方法が必要です。 – shmosel

+0

Javaは大文字と小文字を区別する言語です。慣例として、クラスは大文字( 'Parent'、' Inner')で始まる必要があります。しかし、いずれにしても、大文字小文字は一致しなければならないので、「親」と「親」を混ぜて、同じものを意味するとは思えません。 – ajb

答えて

-1

あなたが直接クラス名を指定せずに、このクラスのメンバにアクセスしたり、

オブジェクトことはできませんので、あなたがあなたMain classparent.inner in = new inner()にアクセスすることはできませんまず第一には、このリンクを経由this

-1
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); //static classes 
OuterClass.InnerClass innerObject = outerObject.new InnerClass(); // non-static classes 
+0

Parent.Innerをインポートし、Parent.innerのようなオブジェクトをnew inner()に作成すると、これは動作しますか? –

+0

@ adithyan.p(1) 'inner'ではなく' Inner'を書かない限り動作しません。 (2)_それぞれの識別子_は、残りの文とは独立した可視性の規則に従って解釈されます。したがって、宣言の始めに 'Parent.Inner'と言う必要がある場合は、' new Parent.Inner'も言わなければなりません。最初に 'Parent.Inner'を使っても' Inner'は他の場所には見えません。 (あなたは 'Parent.Inner'を拡張する' Inner'という別のクラスを持つことができます...これは、異なるパッケージのクラスがこのような名前を共有することは珍しくありません。) – ajb

関連する問題