- - PR -
static なインナークラスのインスタンス可について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-05-21 00:59
いつもお世話になっております。
また分からない事が出てきてしまったので、 質問させて下さい。 class Out{ static class In{ } } 上記のコードのインナークラス( static class In )の インスタンス可の方法についてなのですが、 この場合 ( new Out() ).new In(); の様にインスタンス可しようとするとコンパイル時に >> static クラスの new が修飾されています。 と怒られてしまいます。 static を外してコンパイルするとコンパイルは通るのですが、 なぜ static なインナークラスでは ( new Out() ).new In(); の方法でインスタンス可が出来ないのでしょうか。 どなたか教えて頂けないでしょうか。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-05-21 01:15
むしろ、staticではないエンクロージング型のnewの仕方から覚えているのが不思議ではありますが…。
staticなネストしたクラスは、名前こそ「外側のクラス名.ネストしたクラス名」となりますが、トップレベルのクラスと扱いは同じです。ですから、
となります。 staticがないものはエンクロージング型内部クラスで、外側のクラスのインスタンスと結びついています。 ですから、newするにあたって外側のクラスのインスタンスを指定する必要があります。そのため
となります。 エンクロージング型の場合は、Inクラスの内部から、Out.thisを用いてOutクラスのインスタンスを参照することができます。 staticなネストしたクラスはインスタンスが結びついているわけではありませんから、Out.thisといった記法は使えません。 |
1