gpt4 book ai didi

java - java中字段阴影的查询

转载 作者:行者123 更新时间:2023-12-01 07:24:31 24 4
gpt4 key购买 nike

这个概念与及其实例的概念相矛盾。

下面的程序对我来说看起来不错,并按预期给出了 NullPointerException :

class SuperClass{
int x = 2;
}

class SubClass extends SuperClass{
int x = 4;
}

public class Dummy2 {

public static void main(String[] args){
SubClass obj1 = new SubClass();
SuperClass obj2 = null;
System.out.println(obj1.x);
System.out.println(obj2.x);
}

}

但是当我说 SuperClass obj2 = obj1; 时,奇怪的是我看到了 SuperClass 实例成员值 2 的值,尽管上面的程序中没有创建 class SuperClass 的实例。

这是 Java 中有效的概念吗?

最佳答案

首先,从obj2开始是 null在您的示例中,当您尝试访问 x 时,它当然会抛出 NPE就在其中。

第二,当你设置obj2 = obj1时,您正在类型转换 obj1 ,类型为SubClass ,输入SuperClass 。当您访问x时在obj2 ,您正在访问xSuperClass了解,其值为 2 。这就是它应该如何工作。

原因是 xSubClass不会覆盖xSuperClass 。它只是隐藏它。那么当 obj1被转换为类型 SuperClassxSuperClass现在可见x .

如果您想获得x您似乎期望的值,只需使用 getter 而不是直接访问 x,然后您可以在 SubClass 中覆盖它.

父类(super class):

public class SuperClass {
public int x = 2;

public int getX() {
return x;
}
}

子类:

public class SubClass extends SuperClass {
public int x = 4;

public int getX() {
return x;
}
}

测试代码:

SubClass obj1 = new SubClass();
SuperClass obj2 = obj1;

System.out.println(obj2.x); // outputs 2
System.out.println(obj2.getX()); // outputs 4

关于java - java中字段阴影的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27639495/

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