從頭認識java 1 5 繼承(2)

2021-09-02 12:40:10 字數 1281 閱讀 6218

接著上一章節,我們來繼續介紹繼承。

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 如何在聚合與繼承之間選擇

這一章節我們來聊一下在聚合與繼承之間選擇的問題。在我們平常的編碼裡面,使用聚合或者繼承都可以,或者兩者可以混合使用也行,這個時候就需要做出抉擇,因為 以後還需要維護,怎麼才能達到維護簡單?可讀?因此,我們必須在各種方案中做出抉擇。筆者是這樣認為的 如果新的類只是使用老的類的一部分功能,那麼就是用聚合...