2014-04-23 60 views
0

動物是超爲什麼要將一個子類對象分配給一個超類參考?

貓是動物的子類

貓是貓科動物的一個子類

犬是動物的sublcass

犬是犬

的子類所有類都有自己的eat()方法輸出:

「(class)is e ating「

我已經嘗試過創建動物數組,並通過它們循環,並調用eat()方法,該方法爲每個給定的動物輸出適當的輸出。

我的問題是,這樣做什麼呢一個增益:

Cat j = new Animal(); 

不會Cat j = new Cat()做任何事情,你需要關於與動物類型的方法做的,因爲它已經通過繼承的動物是什麼?

編輯:對不起,我的意思是相反的 - 通過聲明: 動物j = new Cat();

對不起!

+3

'Cat j = new Animal();'不可編譯。 – Braj

+1

你不能那樣做。你的意思是'動物j =新貓()'? –

+0

一個較大的盒子不能裝在較小的盒子裏面。 – Braj

回答

0

通過這樣做我們實現了運行時多態性。

基於重寫的方法將被調用對象的類型

現在來的玩具你的問題

只有一行的答案,這將是

貓始終是一個動物

Animal a = new Cat();//ok 

所有的動物都不是貓

Cat c = new Animal();//not ok 

here是學習和理解這個

+0

有比運行時多態性更多的好處... –

+0

@LuiggiMendoza完全同意只是給他一個基本的想法 –

0

爲什麼一個子類對象賦給一個超類引用一個很好的例子?

  • 多態性

  • 一邊做測試

  • 的靈活性,如果你想在未來

  • 另一種實現方式來取代它Mock對象
  • 在繼承和抽象類最有可能使用

相關問題