私は次のJavaクラスを持っています:
class Outer
{
private Integer a;
private Long b;
class Inner
{
public void foo()
{
System.out.println("a and b are " + a + " " + b);
}
}
}
Outer と Outer$Inner で javap を実行すると、次のようになります。
C:\test>javap Outer
Compiled from "Outer.java"
class Outer extends java.lang.Object{
Outer();
static java.lang.Integer access$000(Outer);
static java.lang.Long access$100(Outer);
}
C:\test>javap Outer$Inner
Compiled from "Outer.java"
class Outer$Inner extends java.lang.Object{
final Outer this$0;
Outer$Inner(Outer);
public void foo();
}
2 つの質問があります。
1) Java コンパイラは、プライベート変数にアクセスするために、外部クラスで「外部」パラメータを取る静的メソッドを生成するのはなぜですか? 内部クラスが this$0 メンバーを介して簡単に呼び出すことができるメソッドをインスタンス化しないのはなぜですか?
2) 内部クラスの this$0 が final になっているのはなぜですか? それが最終的でない場合はどうなりますか?
ありがとうございます。