【发布时间】:2013-01-02 20:10:51
【问题描述】:
我对在向上转换期间如何在 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 的方法。
但是,当我尝试访问test 的myString 时,我不知道为什么使用SuperClass 的字段。由于test 是SubClass 的一个实例,我希望使用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,虽然有帮助,但没有回答我的问题。
提前致谢
【问题讨论】:
标签: java