'这' &安培; '超' Java中的关键字用法

时间:2015-01-19 03:28:07

标签: 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();
    }
}

1 个答案:

答案 0 :(得分:7)

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

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

两者打印是否相同(具体而言,8)。

原因是this.isuper.i都指的是同一个字段ii所拥有的Test是从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

此处我们有两个名为i的不同字段,因此只有this.iB会引用super.i中声明的字段,而i会引用AB声明{{1}}的实例也已继承。

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