假設我有一個名爲Fish的超類和一個名爲Tuna的子類。我不明白爲什麼這個工程:困惑於遍歷具有多態性的類層次結構
Fish f;
Tuna t = new Tuna();
f=t; // I am confused about this statement
f.swim(); // (Tuna's swim method is invoked)
爲什麼魚變量允許「參與有」(美好短語想要的)更專業的金槍魚對象?我明顯錯誤的「noob OOP Java大腦」的工作方式是:
金槍魚「是一個」魚是好的。魚「是」金槍魚不行。因此f = t不應該是正確的,並且t = f應該是正確的。但從我上面的例子來看,情況正好相反!
非常感謝您的幫助。由於我剛剛開始學習Java,因此我提前爲我的無知道歉。
編輯。以下所有答覆非常感謝。從他們那裏,我現在明白了:
稱爲f的變量是Fish類型,因此可以包含位於變量t中的數據值(對象引用),因爲t指的是Tuna對象,因此是f使用的兼容類型。它是兼容的,因爲金槍魚是魚。
字符串不能游泳嗎?我的天啊!我開悟了! –
謝謝!我編輯了我的O.P.以反映我所學到的內容。 – user2911290