到底怎麼辦:“是一個”與“有一個”

上節課我們具體地講述了繼承的機制,並且也設計了一個繼承樹,那麼問題來了:我不是要問挖掘機技術哪家強?我是要問如何來確定一個類是另一個類的子類呢?我們又如何設計一個類而不是某個類中的屬性呢?

“是一個”與“有一個”

這裡我們就要用這麼一個方法來檢驗它們二者之間的關係了:

我們說,手槍是槍械——OK,沒有問題,那麼手槍這個類就是槍械的子類。

還有長劍是一把劍,是一個冷兵器——沒問題,那這樣一個順序的繼承樹就出來了。

或者……手機是一個顯示器? ——好吧,手機有一個顯示器或許會更恰當一些,那麼顯示器就是手機的一個屬性了。

顯示器有二極管——OK,二極管就是顯示器的屬性。

我們靠這樣的一種思考方法,能夠快速甄別繼承樹的設計是否符合邏輯。

對了

這個測試的​​方法還不僅關乎與二者之間,一個繼承樹最底端類應該也能對最頂端的類有“是一個”這樣的關係——比如“手槍是武器”這樣,如果不行,那你的繼承樹設計恐怕就有了問題。

 

順序問題

我們一直在說繼承樹,所以說這是一個樹狀的拓撲,子類一定擁有父類,但父類可不一定就擁有子類——所以說父類並不能知道子類的方法,相反,在子類裡我們可以使用 super 這個關鍵字來調用父類裡的方法,比如我要擴充一下槍械的攻擊方法,就可以這樣來做:

 

我的日記本呢?

還記得我們說過日記本和 private 的比喻嗎?標記為私有的方法和屬性是不能被別人讀取的!你的孩子在未經你許可的情況下也一樣不能偷看你的日記!

所以我們說子類繼承了父類所有成員的時候,其實是不包括私有方法和屬性的!這些成員只在本類裡可見喲~

本文由 落格博客 原創撰寫:落格博客 » 到底怎麼辦:“是一個”與“有一個”

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1120.html

關於作者

R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

註釋

發表評論

您的電子郵件地址不會被公開. 必填字段標 *