当我们使用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)
我相信你的问题是两个陈述的原因
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.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);
}
}
Run Code Online (Sandbox Code Playgroud)
这里我们有两个不同的字段命名i,所以只是i或this.i将引用声明的字段B,而super.i将引用已经继承的实例中的i声明.AB
(旁白:这是一种非常可怕的做法,称为变量阴影.尽量不要这样做)
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |