Java中的'this'和'super'关键字用法

0 java this super

当我们使用this/super来调用类的任何非静态成员时,JVM会为相应的类创建任何对象.

如果我使用'super'更改超类中的任何非静态变量,这种变化也会反映在子类中.

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Msh*_*nik 7

我相信你的问题是两个陈述的原因

System.out.println("super.i = " + super.i);
System.out.println("this.i = " + this.i);
Run Code Online (Sandbox Code Playgroud)

两者都打印相同(具体而言8).

原因是this.i并且super.i都指的是同一个领域i.iTest具有从中继承的那个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里我们有两个不同的字段命名i,所以只是ithis.i将引用声明的字段B,而super.i将引用已经继承的实例中的i声明.AB

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