好吧,我已經通過googleing查找了文檔,但是我還沒有找到任何真正描述了我想要回答的內容,所以在這裏我問你們。瞭解Java中的繼承和抽象類
所以我得到繼承,以及它是如何工作的。我遇到問題時有時會看到最初定義爲一種類型的對象,並設置爲不同類型,並且我不明白到底發生了什麼。這裏有一個例子:
說我有一個類的動物,並擴展動物類貓和狗。貓,動物和狗都有一種方法說話()爲貓打印「喵」和狗打印「woof」和爲動物「不會說話」。
好吧,最後這裏是我的問題。如果一個貓(c)然後運行Animal a = c ;?如果我運行a.speak();會發生什麼情況;?哪種說法叫做?當我改變那種類型時究竟發生了什麼?我會有任何真正的理由來使用它嗎?
就抽象方法而言,我的問題是具有它們的意義究竟是什麼?在我看到的例子中,他們已經被放入了超類,而它們下面的類定義了確切的行爲。把一個抽象方法放在一個超類中是需要它下面的所有類來實現它的嗎?
感謝您的幫助!
子類型多態性解釋'a.speak()',但它不能解釋爲什麼Cat可以隱式地賦值給Animal。一些更多的細節(JLS鏈接會很好),這將是一個很好的答案。 – 2010-12-10 23:50:07
第5.2節包含*可分配*要求。 http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#184206。如下檢查「編譯時參考類型S(源)的值到編譯時參考類型T(目標)的變量的賦值如下」。 – 2010-12-10 23:57:03
由於Cat延伸Animal,因此'Cat'可以隱式分配給'Animal'。一般來說,如果'A'擴展了'B',那麼'A'可以被賦予'B'。如果'A'實現了一個接口'C',那麼它可以被分配給'C'。這些關係是可傳遞的,所以如果'X'擴展'Y'繼而擴展'Z',那麼'X'的一個實例可以被分配給一個被聲明爲'X','Y'或'Z'中任一個的變量。 。 – 2010-12-11 00:03:37