gpt4 book ai didi

java - this 关键字引用父变量

转载 作者:行者123 更新时间:2023-11-29 08:24:32 25 4
gpt4 key购买 nike

今天一位同学提出了一个有趣的问题。我们知道this关键字是用来引用当前对象的。但我无法向他解释 this 关键字的行为如何,如以下代码片段所示。我知道什么是继承:允许访问父类变量和方法。 但是他们复制到子实例的内存区域了吗?因为我可以使用这个关键字来访问父类的属性。

我能够引用父类变量。我搜索并发现没有任何内容被虚拟复制到子类,但为什么会发生以下行为?请解释使用 this 的情况。

class Parent {
int a=10;
}

public class Child extends Parent{

void m1(){
System.out.println(a);
System.out.println(this.a);
System.out.println(super.a);
}

public static void main(String[] args){
new Child().m1();
}
}

https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

最佳答案

属性 aChild 继承。因此,你可以在child中使用this.a来引用它。

问题应该出在哪里?

I searched and found that nothing gets copied virtually to child class

您用错误的例子来说明该陈述。

理解的方法是(粗略地):“在子类中重新声明时,实例变量不会被覆盖,因此您不能将实例声明为 Parent 并期望得到 Child.a 如果实例是使用 new Child() 创建的。这是有问题的案例的示例:

class Parent {
int a = 10;
}

public class Child extends Parent{

int a = 12; //not overridden

public static void main(String[] args){
Parent child = new Child();
System.out.println(child.a); //This will print 10, not 12
}
}

System.out.println(child.a); 将打印 10 因为变量实例字段不会被覆盖。您根据声明的类型获取值(在本例中为 Parent)

关于java - this 关键字引用父变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54307440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com