純繼承與擴充套件

2021-06-18 01:45:33 字數 835 閱讀 7310

在學習繼承時,採取某種「純粹」的方式來建立繼承層次結構似乎是最清楚易懂的方法了。也

就是說,只有在基類或介面中已經建立的方法才可以在匯出類中被過載.

之所以被稱作是純粹的「is-a」(是一種)關係,是因為乙個類的介面已經確定了它應該是什

麼。繼承可以確保所有的匯出類具有基類的所有介面,且絕對不會少。按上圖那麼做,導

出類只是具有和基類一樣的介面。

也可以認為這是一種純替代,因為匯出類可以完全地代替基類,那在我們使用時,就永遠

不需要知道關於子類的任何額外資訊了。

也就是說,基類可以接受我們傳送給匯出類的任何訊息,因為二者有著完全相同的介面。

我們只需從匯出類向上轉型,永遠不需知道正在處理的物件的確切型別。所有這一切,都

是通過多型進行處理的。

按這種方式考慮,似乎只有純粹的 is-a 關係才是唯一明智的做法。 所有其他的設計都只會

導致混亂,當然也就錯誤百出。這仍是乙個陷阱,因為一旦我們深入研究,就會改變主意,

並發現擴充套件介面(遺憾的是,extends 關鍵字似乎在慫恿我們這樣做)才是解決特定問題

的完美方案。可將其定義為「is-like-a」(像乙個)關係,因為匯出類就像是乙個基類——

它有著相同的基本介面——但是它還具有由額外方法實現的其他特性。

雖然這是一種有用且明智的方法(視情況而定),但是它也有缺點。匯出類中擴充套件的介面

不能被基類訪問,因此,一旦我們向上轉型,就不能呼叫那些新增方法:

在這種情況下,如果我們不進行向上轉型,這樣的問題也就不會出現。但是通常情況下,

我們需要重新查明物件的確切型別,以便能夠訪問該型別所擴充的方法。隨後的一節將展

示該具體怎麼做。

繼承與多型(一) 使用繼承擴充套件類

enum breed class mammal mammal int newage,int newweight age newage weight newweight mammal int getage void setage int newage int getweight void setwei...

Sass 擴充套件 繼承

繼承對於了解 css 的同學來說一點都不陌生,先來看一張圖 圖中 顯示 col sub block li,col extra block li 繼承了 item list ul li 選擇器的 padding 0 和 ul li 選擇器中的 list style none outside none ...

繼承和擴充套件

odoo 提供了三種不同的機制以模組化的方式來擴充套件模組 類繼承 class inheritance 用來新增功能 新類相容現有的檢視 儲存在同一張表中 原型繼承 prototype inhertiance 用於拷貝賦值功能 現有檢視忽略新類 儲存在不同的表中 委託繼承 delegation in...