可能的重复:
阴影的概念
我对在向上转换期间如何在 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
. SubClass
关于方法工作的一切对我来说都很清楚:如果给定的方法是为 定义的,我将只能使用 的方法SuperClass
。
但是,SuperClass
当我尝试访问myString
. test
既然test
是SubClass
我期望使用myString
的一个实例SubClass
,为什么没有发生这种情况?我错过了什么?
我知道我可以SubClass
使用this
操作符访问 myString 。例如,我可以printMyString
在 SuperClass 中定义方法,并用
public void printMyString()
{
System.out.println(this.myString);
}
在中SubClass
,所以我的问题主要是关于如何在SuperClass
中使用的领域test
。也许我错过了一些明显的东西?
我试图寻找答案,我发现最接近的主题是Upcasting in Java and two separate object properties,虽然有帮助,但它没有回答我的问题。
先感谢您