私はJavaの代替可能性について読んだので、への参照super
はスーパークラスで合法であるのと同じ場所で合法です(スーパーが表示されないオブジェクトクラスのコードを除いて)。これをテストすると、次の例に示すように失敗するようです。this
super
this
class OuterSuper {
public int oneNumber() { return 5; }
class Inners {}
int i1 = OuterSuper.this.oneNumber();
OuterSuper.Inners si1 = OuterSuper.this.new Inners();
}
class Outer extends OuterSuper {
class Inner {
int i1 = Outer.this.oneNumber();
int i2 = Outer.super.oneNumber();
OuterSuper.Inners si1 = Outer.this.new Inners();
OuterSuper.Inners si2 = Outer.super.new Inners();
}
}
コンパイラーは、メンバーsi2の最後の宣言でボークします。この例では、int i1とi2の宣言を記述できます。仕様にあるように、superに渡すものはすべて、スーパークラスでこれに置き換えることができます。インナークラスの場合、私は立ち往生しており、これを使用する必要があります。これはこれとは違うのですか?どちらの場合も「Outer.this」と「Outer.super」を書いています...
javac(Oracle 1.6のコマンドラインJDK)とNetBeansを使用していることを共有したいと思います。javacから得られるエラーは次のとおりです。
Exe.java:32: <identifier> expected
OuterSuper.Inners si2 = Outer.super.new Inners();
^
Exe.java:32: invalid method declaration; return type required
OuterSuper.Inners si2 = Outer.super.new Inners();
^
2 errors