インナークラスの生成
アウタークラスを指定してインナークラスを生成することが出来たりしますが、あまり知られていません。
以下のようなコードで可能。
Outer outer = new Outer(); Outer.Inner inner = outer.new Inner();
これで、outer への参照を持った Inner クラスのインスタンスが生成されるわけだが、この構文を使う場面が私には思いつきません(w
こんな構文を使う必要がある場面って、そもそも設計を失敗しているんじゃ?と思うわけです。
アウタークラスの中でインナークラスをnewするのは割とよく使うけど、アウタークラスの外でインナークラスを生成したことは無いなぁ。
ちなみに詳しくは知らないが Java の言語仕様では、
- ↓インナークラス
class Outer { class Inner { } }
- ↓ネスティッドクラス
class Outer { static class Nested { } }
というように、static の有無によってインナークラス/ネスティッドクラスと呼び分けられているそうな。
static が付いている場合は、単に名前空間がアウタークラスの内側というだけで、アウタークラスへの参照は持ちません。
#でもアウタークラスのプライベートフィールド等へのアクセスは可能
C++のネストクラスと似たものかと。