'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.i
和super.i
都指的是同一个字段i
。 Test
的 i
是从 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
将引用 [= 中声明的字段23=],而 super.i
将引用 A
中声明的 i
,B
的实例也已继承。
(旁白:这是一种非常糟糕的做法,称为变量阴影。尽可能不要这样做)
当我们使用 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.i
和super.i
都指的是同一个字段i
。 Test
的 i
是从 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
将引用 [= 中声明的字段23=],而 super.i
将引用 A
中声明的 i
,B
的实例也已继承。
(旁白:这是一种非常糟糕的做法,称为变量阴影。尽可能不要这样做)