面向?qū)ο蟪绦蛟O(shè)計(jì)有4個(gè)主要特點(diǎn):抽象、封裝、繼承和多態(tài)性。本章主要介紹有關(guān)繼承的知識(shí),多態(tài)性將在后續(xù)章節(jié)中講解。 繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)最重要的特征,可以說(shuō),如果沒(méi)有掌握繼承性,就等于沒(méi)有掌握類和對(duì)象的精華,就是沒(méi)有掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的真諦。
? 繼承關(guān)系舉例萬(wàn)事萬(wàn)物中皆有繼承,是重要的現(xiàn)象。 案例:植物繼承圖 傳遞性:高等植物,蕨類植物,苔蘚都是植物,具有植物的共同特征。 不對(duì)稱性:不是所有植物都屬于菌類。
繼承是類之間定義的一種重要關(guān)系 一個(gè)B類繼承A類,或者說(shuō)從A類派生B類;那么A類稱為基類(父類),B類稱為派生類(子類),像父子關(guān)系一樣。
? 派生類的定義1、類繼承關(guān)系的語(yǔ)法
2、基類名列表: 訪問(wèn)限定符 基類名1,訪問(wèn)限定符 基類名2... 3、訪問(wèn)限定符表示派生類對(duì)基類的繼承方式,使用關(guān)鍵字: ? public公有繼承 ? private私有繼承 ? protected保護(hù)繼承
? 繼承重要說(shuō)明和示例說(shuō)明: 1、子類擁有父類的所有成員變量和成員函數(shù); 2、子類可以擁有父類沒(méi)有的方法和屬性; 3、子類就是一種特殊的父類; 4、子類對(duì)象可以當(dāng)作父類對(duì)象使用(在父類做函數(shù)形參時(shí),可以傳子類對(duì)象)。 實(shí)例:
? 派生類的訪問(wèn)控制1、不同的繼承方式會(huì)改變繼承成員的訪問(wèn)屬性 public繼承:父類成員在子類中保持原有訪問(wèn)級(jí)別; private繼承:父類成員在子類中變?yōu)閜rivate成員; protected繼承:父類中public成員會(huì)變成protected。
2、private成員在子類中依然存在,但是卻無(wú)法訪問(wèn)到。不論種方式繼承,派生類都不能直接使用基類的私有成員 。(可以通過(guò)提供接口訪問(wèn)) 類的繼承方式會(huì)影響父類的屬性在子類中的訪問(wèn)權(quán)限。
? 能否被訪問(wèn)、繼承方式選擇1、如何判斷成員是否能被訪問(wèn):“三看”原則 1> 看調(diào)用語(yǔ)句,是再寫(xiě)在子類的內(nèi)部還是外部; 2> 看子類如何從父類繼承; 3> 看父類訪問(wèn)級(jí)別。
2、派生類類成員訪問(wèn)級(jí)別設(shè)置的原則 思考:如何恰當(dāng)?shù)氖褂胮ublic,protected和private為成員聲明訪問(wèn)級(jí)別? 1> 需要被外界訪問(wèn)的成員直接設(shè)置為public; 2> 只能在當(dāng)前類中訪問(wèn)的成員設(shè)置為private; 3> 只能在當(dāng)前類和子類中訪問(wèn)的成員設(shè)置為protected,protected成員的訪問(wèn)權(quán)限介于public和private之間。 PS:一般情況下,均使用public繼承方式。
? 類型兼容性原則類型兼容規(guī)則是指在需要基類對(duì)象的任何地方,都可以使用公有派生類的對(duì)象來(lái)替代。
類型兼容規(guī)則中所指的替代包括以下情況: ? 子類對(duì)象可以當(dāng)作父類對(duì)象使用 ? 子類對(duì)象可以直接賦值給父類對(duì)象 ? 子類對(duì)象可以直接初始化父類對(duì)象 ? 父類指針可以直接指向子類對(duì)象 ? 父類引用可以直接引用子類對(duì)象 在替代之后,派生類對(duì)象就可以作為基類的對(duì)象使用,但是只能使用從基類繼承的成員。 類型兼容規(guī)則是多態(tài)性的重要基礎(chǔ)之一。 總結(jié):子類就是特殊的父類。
? 繼承中的構(gòu)造和析構(gòu)1、問(wèn)題:子類如何初始化父類成員?父類與子類的構(gòu)造函數(shù)有什么關(guān)系? ☆ 在子類對(duì)象構(gòu)造時(shí),需要調(diào)用父類構(gòu)造函數(shù)對(duì)其繼承得來(lái)的成員進(jìn)行初始化。 ☆ 在子類對(duì)象析構(gòu)時(shí),需要調(diào)用父類析構(gòu)函數(shù)對(duì)其繼承得來(lái)的成員進(jìn)行清理。 2、繼承中的構(gòu)造析構(gòu)調(diào)用原則 ☆ 子類對(duì)象在創(chuàng)建時(shí)會(huì)首先調(diào)用父類的構(gòu)造函數(shù); ☆ 父類構(gòu)造函數(shù)執(zhí)行結(jié)束后,執(zhí)行子類的構(gòu)造函數(shù); ☆ 當(dāng)父類的構(gòu)造函數(shù)有參數(shù)時(shí),需要在子類的初始化列表中顯示調(diào)用; ☆ 析構(gòu)函數(shù)調(diào)用的先后順序與構(gòu)造函數(shù)相反。
|
|