接著上一章節,我們來繼續介紹繼承。
1.子類呼叫方法時的查詢方法的順序:
package com.ray.ch01;
public class animal
public void sleep()
}
package com.ray.ch01;
public class bird extends animal
public static void main(string args)
}
輸出:bird is eating
package com.ray.ch01;
public class dog extends animal
}
輸出:animal is eating
我們先看類圖:
根據類圖就比較清晰,呼叫方法的順序:
1)現在實現類裡面找,也就是new後面的那個類去找,如果沒有,轉2
2)到父類去找,一直這樣迴圈的向上一層找,找到為止,不然報錯。
2.繼承的要點。
(1)子類是extend父類出來的
(2)子類會繼承父類public和protected的方法和例項變數,但不會繼承private的。
(3)繼承下來的方法可以被覆蓋,但是例項變數不可以。
(4)通過is-a測試來驗證繼承的合理性。
(5)is-a關係是單向的,鳥是動物,但是,動物不一定是鳥。
(6)當方法被覆蓋,呼叫的時候先呼叫重寫的方法。
(7)如果x是y的父類,y是z的父類,那麼x也是z 的父類。
3.is-a和is-like-a
「是乙個」和「像乙個」
我們再看上面的類圖,對比之前的動物的類圖,這個類圖的子類明顯多了一些其他的東西。
動物的那個類圖我們認為是完全替換,在子類裡面沒有其他的方法,是理想的繼承方式,但是,在現實世界當中,經常需要在新的分類裡面增加自己特有的方法,這個時候只能說「像乙個」,而不是上面的「是乙個」,當然,這種也算繼承的方式,只不過沒有那麼絕對的替換,但更加適應現實需求。
總結:這一章節我們討論了呼叫子類方法的查詢順序以及繼承的關係。
這一章節就到這裡,謝謝。目錄
JAVA1 5新特性 註解Annotation
public inte ce inherited string value value string 註解型別與介面的像是之處 註解型別是一種介面,但它又不同於介面,如何自定義註解型別 1 使用 inte ce關鍵字 2 使用註解時類似與public final這樣的修飾符。3 可用於修飾類 介面 ...
Java1 5新特性。Executors的一些用法
執行緒池 excutors的用法 返回型別 方法 static callablecallable privilegedaction action 返回 callable 物件,呼叫它時可執行給定特權的操作並返回其結果。static callablecallable privilegedexcepti...
從頭認識java 6 4 如何在聚合與繼承之間選擇
這一章節我們來聊一下在聚合與繼承之間選擇的問題。在我們平常的編碼裡面,使用聚合或者繼承都可以,或者兩者可以混合使用也行,這個時候就需要做出抉擇,因為 以後還需要維護,怎麼才能達到維護簡單?可讀?因此,我們必須在各種方案中做出抉擇。筆者是這樣認為的 如果新的類只是使用老的類的一部分功能,那麼就是用聚合...