2017-10-06 75 views
-4

我對以下練習感到困惑,並且沒有在搜索功能中發現那種問題。在鑄造java中的繼承版本

這些替代產品都是可執行文件,因爲:

class Animal 
class Dog extends Animal //Dog is an extension of Animal 

我們要Dog類的一個對象分配給Animal類型的變量:

(1) Animal t = new Object(); 
(2) Animal t = (Dog) (new Object()); 
(3) Animal t = new Dog(); 
(4) Animal t = (Dog) new Class(); 
  1. :是錯誤的,因爲它與狗無關。
  2. 不錯:對象是Dog的高級類,我們將它投射到延伸動物的Dog,所以它沒關係。
  3. 不錯:沒關係,因爲每條狗都是動物。
  4. 錯誤:新的類不defiend,所以它錯了。

我的推理是否正確?我很感謝每一個幫助。

+3

你可以很容易地測試,不是嗎? – Blorgbeard

+1

我不會給你一個你的問題的答案,但你想要搜索的魔術關鍵字是'java多態性' – engineercoding

+1

對象的類是對象本身的質量。無論你將它轉換成什麼,你都不會改變對象的類,只是你的代碼選擇如何查看該類。如果你創建的對象不是繼承自動物的類,則施放不會使它成爲動物。 – VGR

回答

0

沒有嘗試過,但我認爲:

(1) Animal t = new Object(); 

無效 - 一個Object不是Animal - 不會編譯

(2) Animal t = (Dog) (new Object()); 

無效 - 一個Object不是Animal - 會編譯但在運行時會失敗

(3) Animal t = new Dog(); 

罰款 - 一個DogAnimal

(4) Animal t = (Dog) new Class(); 

這是一樣的(2) - 你肯定你把它抄了吧?

+0

是的,我做過。這可能是更容易的問題之一,但我很困惑,尤其是(2)和(3)。謝謝你。 – PeterPan