我指的是java语言规范,以了解super的用法.虽然我理解第一个用例即
表单
super.Identifier引用当前对象的名为Identifier的字段,但将当前对象视为当前类的超类的实例.
我似乎无法理解以下用例:
该表单
T.super.Identifier引用了与词汇封闭实例相对应的名称IdentifierT,但该实例被视为超类的实例T.
有人可以借助代码解释一下吗?
我想以下可能是第二种情况的说明:
class S{
int x=0;
}
class T extends S{
int x=1;
class C{
int x=2;
void print(){
System.out.println(this.x);
System.out.println(T.this.x);
System.out.println(T.super.x);
}
}
public static void main(String args[]){
T t=new T();
C c=t.new C();
c.print();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:2 1 0
我相信它适用于这种情况
public class Main {
static class Child extends Parent{
class DeeplyNested {
public void method() {
Child.super.overriden();
}
}
public void overriden() {
System.out.println("child");
}
}
static class Parent {
public void overriden() {
System.out.println("parent");
}
}
public static void main(String args[]) {
Child child = new Child();
DeeplyNested deep = child.new DeeplyNested();
deep.method();
}
}
Run Code Online (Sandbox Code Playgroud)
在JLS
T.super.Identifier 形式指的是对应于 T 的词法封闭实例的名为 Identifier 的字段,但该实例被视为 T 的超类的实例。
Identifier是overriden,方法。
这里,lexically enclosing instance类型是Child,它的超类是Parent。So指的是被视为 的T.super实例。ChildParent
上面的代码打印
parent
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |