staticメソッド内からインナークラスを生成する場合は、まず外部クラスのインスタンスを生成し、そのインスタンスからさらに new で生成する。問題で見慣れた Inner inner = new Inner(); といったノーマルな記述があっても、 Inner クラスがインナークラスであり、 static メソッド内に定義されていればコンパイルエラーとなる。これは引掛け問題かも。試験ではコードを良く見ないと気づかないものが多い。
[NewInnerFromStatic.java]
/**
* staticメソッド内からインナークラスを生成するには テストクラス
*/
public class NewInnerFromStatic {
class Inner {
}
public static void main(String[] args) {
// Inner inner = new Inner(); // コンパイルエラー
// Inner を生成するにはまず NewInnerFromStatic を
// 生成しなければならない
NewInnerFromStatic ni = new NewInnerFromStatic();
Inner in = ni.new Inner();
// これをコンパクトにすると...
Inner in2 = new NewInnerFromStatic().new Inner();
ni.nonStatic();
}
public void nonStatic() {
// 非staticメソッドであれば
// this を利用してこの方法だけで生成可能
Inner inner = new Inner();
}
}