当我们使用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();
}
}
答案 0 :(得分:7)
我相信你的问题是两个陈述的原因
System.out.println("super.i = " + super.i);
System.out.println("this.i = " + this.i);
两者打印是否相同(具体而言,8
)。
原因是this.i
和super.i
都指的是同一个字段i
。 i
所拥有的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.i
或B
会引用super.i
中声明的字段,而i
会引用A
中B
声明{{1}}的实例也已继承。
(旁白:这是一种非常可怕的做法,称为变量阴影。尽量不要这样做)