'this' & 'super' 关键字在 Java 中的使用

'this' & 'super' keyword usage in Java

当我们使用 this/super 调用 class 的任何非静态成员时,JVM 会为相应的 class.

创建任何对象

如果我使用 'super' 更改 super class 中的任何非静态变量,此更改也会反映在 subclass.

class A
{
    int i;
}
class Test extends A {
    void test()
    {
        super.i = 10;
        this.i = 8;
        System.out.println("super.i = " + super.i);
        System.out.println("this.i = " + this.i);
    }
    public static void main(String[] args) {
        Test obj = new Test();
        obj.test();
    }
}

我相信你的问题是为什么这两个陈述

System.out.println("super.i = " + super.i);
System.out.println("this.i = " + this.i);

都打印相同的东西(具体来说,8)。

原因是this.isuper.i都指的是同一个字段iTesti 是从 A 继承而来的。因此说super.i是多余的。

将您的示例与此进行对比:

public class A{
    int i;
}

public class B extends A{
    int i;

    void test(){
        this.i = 8;
        super.i = 10;
        System.out.println("super.i = " + super.i);
        System.out.println("this.i = " + this.i);
    }
}

这里我们有 两个不同的字段 命名为 i,所以 ithis.i 将引用 [= 中声明的字段23=],而 super.i 将引用 A 中声明的 iB 的实例也已继承。

(旁白:这是一种非常糟糕的做法,称为变量阴影。尽可能不要这样做)