- - PR -
ネストクラスについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-05-27 14:12
現在、SJC-P取得のために勉強をしていますが、以下のネストクラスに
ついてなぜそうなるのか理解できません。 @の場合はコンパイルできるのですが、Aではコンパイルエラーととなります。 @もAもOuterクラスのオブジェクトをInnerクラスの前に置いているという 事では同じだと思うのですが、、 ------------------------------------------------------ class Outer{ static class Inner{ } } class Test0_10{ public static void main(String args[]){ //@↓これはOK //Outer.Inner in =new Outer.Inner(); //A↓これはコンパイルエラーとなる Outer out = new Outer(); Outer.Inner in = out.Inner(); } } ------------------------------------------------------- | ||||||||||||
|
投稿日時: 2005-05-27 14:23
1は"Outer.Inner"というクラスをnewしてますが、2は"Inner"というメソッドの呼び出しです。
| ||||||||||||
|
投稿日時: 2005-05-27 16:52
蛇足ですが。
コンパイルエラーメッセージをじっくり読むとよろしいに違いありません ![]() ちなみに、書籍には書いてあるかもしれませんが、Inner が static でない場合に Inner のオブジェクトを一発で生成しようとすると、以下のような割とややこしい式になります。
追記: 言語仕様を調べたところ、括弧なしで
でも良いようです。 けれども、ますますわかりにくいコードになってしまいますね。 [ メッセージ編集済み 編集者: Gio 編集日時 2005-05-27 17:06 ] | ||||||||||||
|
投稿日時: 2005-05-27 17:04
なるほど!
Aは@と等価ではなく、 Outer.Inner in = (new Outer()).Inner(); になる訳ですね。 ご教示して頂きありがとうございました。 |
1