我已经阅读了 Java 中super
和的可替代性,因此在超类中合法的相同位置this
引用是合法的(除了类 Object 的代码,其中 super 不能出现)。当我对此进行测试时,它似乎失败了,如下例所示: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 的任何内容替换为超类中的 this。对于内部班级,我被困住了,不得不使用它。这是不一样的吗?我在这两种情况下都在写“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