我感到困惑的是如何類的字段向上轉型過程中的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
它是類的一個實例;但是,我正在告訴編譯器將其視爲SuperClass
。關於方法的工作,一切都很清楚:如果爲SuperClass
定義了給定方法,我將只能使用的方法。
但是,我爲什麼在嘗試訪問test
的myString
時爲什麼使用SuperClass
的字段時丟失了。由於test
是的一個實例,因此我期望使用中定義的myString
,爲什麼不會發生這種情況?我錯過了什麼?
我知道我可以通過使用this
運算符來訪問,的myString。例如,我可以在父類定義printMyString
方法,並與
public void printMyString()
{
System.out.println(this.myString);
}
在覆蓋它,所以我的問題主要是關於怎麼來的SuperClass
領域中test
使用。也許我錯過了一些明顯的東西?
我試圖尋找答案,我發現最接近的主題是Upcasting in Java and two separate object properties,雖然很有幫助,但沒有回答我的問題。
先謝謝你
很好的問題@Akavall –