作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读过关于 super
和 this
在 Java 中的可替换性,因此对 super
的引用在相同的地方是合法的其中 this
在父类(super class)中是合法的(除了类 Object 的代码,其中 super 不能出现)。当我对此进行测试时,它似乎失败了,如下例所示:
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 class)的任何内容替换为父类(super class)中的 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
最佳答案
所以,这是我的两分钱。我的印象是 super
只能在一个类中用来引用它自己的基类。我不认为允许引用另一个类的 super
即使是内部类关系。这是因为除了类本身之外,没有其他类能够绕过方法覆盖。
因此,根据 Java 规范:
It is a compile-time error if the current class is not an inner class of class T or T itself
鉴于此,您的代码应该可以编译。
关于java - super 和 this 的可替代性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13606300/
我是一名优秀的程序员,十分优秀!