http://javafaq.jp/S016.html
!!!大まかに
class TopLevelClass { // トップレベル型
static class StaticMemberClass {} // staticなメンバー型
class NonStaticMemberClass {} // 非staticなメンバー型
static {
class StaticInitializerLocalClass {} // ローカルクラス
}
{
class InstanceInitializerLocalClass {} // ローカルクラス
}
static void staticMethod() {
class StaticMethodLocalClass {} // ローカルクラス
Runnable staticAnonymousClassInstance =
new Runnable() { // 匿名クラス
public void run() {}
};
}
void method() {
class MethodLocalClass {} // ローカルクラス
Runnable anonymousClassInstance =
new Runnable() { // 匿名クラス
public void run() {}
};
}
}
これらの型の分類を示したのが以下の図です。
[型](注1)
│
├[トップレベル型]
│
└[ネストした型]
│
├[メンバ型]
│ │
│ ├[staticなもの]
│ │
│ └[staticでないもの]
│
├[ローカルクラス]
│
└[匿名クラス]
!!!内部クラスから外側のクラスのメソッドや変数を明示的に参照するにはどうすれば良いのですか?
[S016 A-10]
それぞれ、「クラス名.this.メソッド名」、「クラス名.this.変数名」とします。
!!!ネストした型を他のクラスから new するにはどうすれば良いのですか?
[S016 A-11]
staticなメンバ型の場合はnew Outer.Inner()のように、
それ以外の場合(内部クラスの場合)はそれを囲うクラスのインスタンスを用いて
outer.new Inner()のようにします。
{{category2 プログラミング言語,Java}}