三種繼承方式
不同的繼承方式,主要區別在於基類中不同訪問許可權的成員在派生類中的訪問許可權變化情況。下面一一介紹。
先來說說公有繼承,公有繼承的模式下,特點如下:
基類中的公有成員,在派生類中仍然為公有成員。當然無論派生裡的成員函式還是派生類物件都可以訪問。
基類中的私有成員,無論在派生類的成員還是派生類物件都不可以訪問。
基類中的保護成員,在派生類中仍然是保護型別,可以通過派生類的成員函式訪問,但派生類物件不可以訪問!
第二種,私有繼承。
在私有繼承的情況下,公有型別、私有型別、受保護型別三種成員的訪問許可權如下:
基類的公有和受保護型別,被派生類私有繼承吸收後,都變為派生類的私有型別,即在類的成員函式裡可以訪問,不能在類外訪問。
而基類的私有成員,在派生類無論類內還是類外都不可以訪問。
可以看出來,如果為私有派生,則基類的私有成員在派生類甚至再派生出的子類中,都無法再使用。沒有什麼存在意義,故這種使用情況比較少。
第三種,保護繼承
保護型別的繼承,特點如下:
基類的公有成員和保護型別成員在派生類中為保護成員。
基類的私有成員在派生類中不能被直接訪問。
可以看的出來,派生類裡的成員函式可以訪問基類的公有成員和保護成員,但在類外通過派生類物件則無法訪問它們。同樣,無論派生類裡的成員函式還是通過類物件都無法訪問基類中的私有成員。
下面還是以時鐘和鬧鐘的程式程式碼為例,實驗基類中不同型別通過不同許可權派生的訪問問題。
對於公有型別,無論在派生類的成員方法裡還是類外都可以呼叫,編譯無錯執行如下:
111.png
但對於私有成員,我們試圖增加一行程式碼見41行。
我們試圖在派生類的成員函式中對吸收來自基類的H變數進行賦值,編譯得到報錯,見紅色方框與下方提示:
222.png
可以看到錯誤資訊“H為私有型別”。
而對於受保護型別的,我們嘗試在基類中定義一個protected型別的變數w,並試圖在公有繼承的派生類方法中賦值使用,可以看到下圖的情況,完全可以訪問。如下圖:
333.png
對於私有繼承,公開型別的成員在類外訪問情況:
444.png
大家可以自行上機實驗,驗證不同型別成員在公有繼承下的訪問情況。
學習並實驗過後,我們可以總結如下:
基類私有成員,無論什麼派生許可權,派生類內成員函式和類外都是不可以訪問的。
私有繼承,無論基類原來什麼型別,在派生類外通過成員函式都不可以訪問。
派生類從基類中吸收的成員的訪問許可權為基類中訪問許可權和派生時派生許可權兩者之中最低的一種。
並根據派生的許可權、基類中定義的許可權,在派生類的類內和類外不同訪問時的組合情況,列出下表:
公有繼承 保護繼承 私有繼承 訪問位置 類內 類外 類內 類外 類內 類外 公有成員 可以 可以 可以 不可以 可以 不可以 保護成員 可以 不可以 可以 不可以 可以 不可以 私有成員 不可以 不可以 不可以 不可以 不可以 不可以
相關文章
- js實現繼承的三種方式JS繼承
- JavaScript的幾種繼承方式JavaScript繼承
- Javascript 中實現物件原型繼承的三種方式JavaScript物件原型繼承
- JS中的多種繼承方式JS繼承
- JavaScript 中的六種繼承方式JavaScript繼承
- JS 繼承的 六 種實現方式JS繼承
- [JS]繼承的這6種方式!(上)JS繼承
- [JS]繼承的這6種方式!(下)JS繼承
- 細說 js 的7種繼承方式JS繼承
- js繼承方式JS繼承
- javascript幾種繼承方式;不看就out啦JavaScript繼承
- 原型鏈實現繼承的6種方式原型繼承
- 6種JavaScript繼承方式及優缺點JavaScript繼承
- Javascript 五十問——實現的繼承多種方式JavaScript繼承
- 實現繼承的幾種方式及工作原理繼承
- JavaScript 各種繼承方式優缺點對比JavaScript繼承
- JS中的多種繼承方式(第12天)JS繼承
- JavaScript繼承的多種方式和優缺點JavaScript繼承
- JS 總結之原型繼承的幾種方式JS原型繼承
- c++----繼承方式C++繼承
- js實現繼承的幾種方式和對比JS繼承
- 記不住的繼承方式繼承
- js繼承方式講解JS繼承
- 繼承的實現方式繼承
- js的13種繼承JS繼承
- CSS的繼承和使用方式CSS繼承
- JS中繼承方式總結JS中繼繼承
- JavaScript實現繼承的方式JavaScript繼承
- odoo 繼承(owl繼承、web繼承、view繼承)Odoo繼承WebView
- 好程式設計師分享JavaScript六種繼承方式詳解程式設計師JavaScript繼承
- 物件導向:類的定義和繼承的幾種方式物件繼承
- JavaScript常用八種繼承方案JavaScript繼承
- JavaScript中的六種繼承JavaScript繼承
- 菱形繼承,虛繼承繼承
- 原型,繼承——原型繼承原型繼承
- PHP模擬多繼承的方式:traitsPHP繼承AI
- 如何用繼承的方式完成包裝繼承
- 多繼承 與 多重繼承繼承