gpt4 book ai didi

java - 向上转型时,Java 如何处理字段?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:27 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
The concept of shadowing

我对 Java 在向上转型期间如何处理类的字段感到困惑。例如:

class SuperClass
{
String myString = "String in SuperClass";

public void myMethod()
{
System.out.println("Method in SuperClass");
}
}

class SubClass extends SuperClass
{
String myString = "String in SubClass";

public void myMethod()
{
System.out.println("Method in SubClass");
}
}

class Question
{
public static void main(String[] args)
{
SuperClass test = new SubClass();
// object test is an instance of SubClass
// but I am telling the compiler to treat it as SuperClass

test.myMethod();
System.out.println(test.myString);

}
}

输出:

Method in SubClass
String in SuperClass //Why is "String in SubClass" not used?

当我创建一个对象 test 时,它是 SubClass 类的一个实例;但是,我告诉编译器将它视为 SuperClass。我很清楚关于方法工作的一切:如果给定的方法是为 SuperClass 定义的,我将只能使用 SubClass 的方法。

但是,当我尝试访问 testmyString 时,我不明白为什么要使用 SuperClass 的字段。由于 testSubClass 的一个实例,我希望 SubClass 中定义的 myString 被使用,为什么这不是发生了什么?我错过了什么?

我知道我可以使用 this 运算符访问 SubClass 的 myString。例如,我可以在 SuperClass 中定义 printMyString 方法,并用

覆盖它
public void printMyString()
{
System.out.println(this.myString);
}

SubClass 中,所以我的问题主要是关于 SuperClass 的字段如何在 test 中使用。也许我遗漏了一些明显的东西?

我试图搜索答案,我找到的最接近的主题是Upcasting in Java and two separate object properties ,虽然有帮助,但没有回答我的问题。

提前致谢

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