gpt4 book ai didi

java - super 和 this 的可替代性

转载 作者:行者123 更新时间:2023-11-30 11:38:30 26 4
gpt4 key购买 nike

我读过关于 superthis 在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com