- 締切済み
staticつきのインナークラスのインスタンスについて
以下のようにTestクラス内にstaticなSIクラスを作成しました。 SIクラスのmethodSI()を呼び出す際に、 ( ( new Test() ).new SI() ).methodSI(); のように呼び出しを行おうとすると、エラーになります。 その原因を教えてください。 public class Test{ static class SI{ void methodSI(){ System.out.println( "method si" ); } } public static void main( String args[] ){ //次の行↓ ( ( new Test() ).new SI() ).methodSI(); //以下は全て成功します。 (new Test()).SI(); ( new Test.SI() ).methodSI(); ( new SI() ).methodSI(); } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- thamansa
- ベストアンサー率40% (95/232)
SIクラスのインスタンス生成に、親であるTestのインスタンスは不要です。 main() が Testに属していますので、 単に new SI().methodSI(); でよいはずです。 他のクラスのメソッド内から呼ぶ場合は new Test.SI().methodSI(); となります。
- auty
- ベストアンサー率58% (284/486)
・ (new Test()).SI();も失敗しているはずです。 この場合、SI()はインスタンス(new Test())のメソッドとして解釈されようとします。 ・ ( ( new Test() ).new SI() ).methodSI();は ((new Test()).(new SI())).methodSI(); を意図しているかも知れませんが、その場合もインスタンスとインスタンスをドットで結ぶことは出来ないでしょう。 実際のところ、ドット演算子のほうが、new演算子より結合が強いので ( ( new Test() ).new SI() ).methodSI(); は文法的にも間違っているかも知れません。