定義
繼承性是面向?qū)ο蟪绦蛟O計的一個最重要的概念。繼承性允許在構(gòu)成軟件系統(tǒng)的層次結(jié)構(gòu)中利用已經(jīng)存在的類并擴充它們,以支持新的功能。這使得編程者只需要在新類中定義已經(jīng)存在的類中所沒有的成分來建立新類,從而大大提高了軟件的可重用性和可維護性。
對于客觀世界中既有共性又有差別的兩個類別以上的實體是不可能被抽象成一個class類型來描述的,編程者往往采用繼承的方法。首先定義一個包含所有實體共性的class類型作為“基類”,然后,從該基類中繼承所有信息,再添加新的信息,來構(gòu)成新的類。
在構(gòu)建新類的過程中,新建立的類被稱為“子類”或者“派生類”;而被繼承的包含相同特征的類稱為“父類”或者“基類”。派生類繼承了基類的全部成員,并且可以增加基類所沒有的數(shù)據(jù)成員和成員函數(shù),以滿足描述新對象的需求。1
相關(guān)關(guān)系說明1.基類,父類,超類是指被繼承的類,派生類,子類是指繼承于基類的類.
2.在C++中使用:冒號表示繼承,如class A:public B;表示派生類A從基類B繼承而來
3.派生類包含基類的所有成員,而且還包括自已特有的成員,派生類和派生類對象訪問基類中的成員就像訪問自已的成員一樣,可以直接使用,不需加任何操作符,但派生類仍然無法訪問基類中的私有成員.
4.在C++中派生類可以同時從多個基類繼承,Java不充許這種多重繼承,當繼承多個基類時,使用逗號將基類隔開.
5.基類訪問控制符,class A:public B 基類以公有方式被繼承,A:private B 基類以私有方式被繼承,A:protected B 基類以受保護方式被繼承,如果沒有訪問控制符則默認為私有繼承。
6.protected 受保護的訪問權(quán)限;使用protected 保護權(quán)限表明這個成員是私有的,但在派生類中可以訪問基類中的受保護成員。派生類的對象就不能訪問受保護的成員了。
7.如果基類以public 公有方式被繼承,則基類的所有公有成員都會成為派生類的公有成員.受保護的基類成員成為派生類的受保護成員.
8.如果基類以private 私有被繼承,則基類的所有公有成員都會成為派生類的私有成員.基類的受保護成員成為派生類的私有成員.
9.如果基類以protected 受保護方式被繼承,那么基類的所有公有和受保護成員都會變成派生類的受保護成員。
10.不管基類以何種方式被繼承,基類的私有成員,仍然保有其私有性,被派生的子類不能訪問基類的私有成員2。
舉例繼承過程將創(chuàng)建一個新的派生類,它由基類的成員加上派生類添加的任何新成員組成。 在多重繼承中,可以構(gòu)建一個繼承關(guān)系圖,其中相同的基類是多個派生類的一部分。 下圖顯示了此類關(guān)系圖。
在該圖中,顯示了CollectibleString和CollectibleSortable的組件的圖形化表示形式。 但是,基類Collectible位于通過CollectibleSortableString路徑和CollectibleString路徑的CollectibleSortable中。 若要消除此冗余,可以在繼承此類類時將其聲明為虛擬基類。