繼承
對象類的概念是很有用的,因?yàn)閷ο箢惪梢詫?shí)現(xiàn)用最小的代價(jià)創(chuàng)建許多新的對象實(shí)例。使用繼承機(jī)制可使得這一概念更加有用[TAIV96]。
繼承可以在已有類上定義新的對象類。稱為子類的新類,將自動(dòng)包含稱為父類的原始類所定義的方法和變量。子類在許多方面不同于父類:
1. 子類可以包含父類中所沒有的方法和變量。
2. 子類可以通過重新定義來重載父類中任何相同名字的方法和變量。這提供了處理特例的簡單有效方法。
3. 子類可以對從父類繼承的方法或變量在某些方面加以限制。
繼承機(jī)制是遞歸的,可以實(shí)現(xiàn)子類成為其子類的父類。這樣,就建立了一種繼承層次,從概上可以認(rèn)為繼承層次是定義了一種方法和變量的搜索技術(shù)。當(dāng)一個(gè)對象收到一個(gè)消息,而執(zhí)行沒有在其類中定義的方法時(shí),對象將沿繼承層次向上搜索直至找到該方法。類似地,,如果一種方法的執(zhí)行造成相關(guān)變量沒有在該類中定義,則對象就會(huì)沿著繼承層次向上搜索變量名。
多態(tài)性
多態(tài)性是一個(gè)很有趣且很有用的特性。它使得把不同實(shí)現(xiàn)隱藏于共同接口之后成為可能。兩個(gè)多態(tài)的對象使用相同的方法名字,對其他對象呈現(xiàn)相同接口。例如,對不同的輸出設(shè)備會(huì)有許多打印對象,如printDotmatrix、printLaser、printScreen等;或是不同類型的文件,如printText、printDrawing、print-Compound。如果每一對象包含一個(gè)稱為print的方法,那么通過向合適的對象發(fā)送print消息,任何文件都可以被打印,而不必關(guān)心方法是怎樣真正實(shí)現(xiàn)的,多態(tài)性典型地應(yīng)用于一個(gè)父類的多個(gè)子類的相同方法,每個(gè)方法都有一個(gè)不同的具體實(shí)現(xiàn)。
將多態(tài)性與常用的標(biāo)準(zhǔn)組件編程技術(shù)進(jìn)行比較是有益的。自上而下的標(biāo)準(zhǔn)組件設(shè)計(jì)的目的是要使用高層模塊的固定接口實(shí)現(xiàn)底層模塊的通用效用。可以實(shí)現(xiàn)一個(gè)較低層的模塊被許多不同的高層的模塊使用。
接口
接口使得子類對象使用父類的功能,有時(shí)需要定義一個(gè)具有多個(gè)父類功能的子類,這可能對相應(yīng)產(chǎn)生一個(gè)子類繼承多個(gè)父類。C++是一種允許多重繼承的語言。然而,為簡單起見,大多數(shù)現(xiàn)代面向?qū)ο缶幊陶Z言,如java、C#和Visual Basic.NET,限制一個(gè)子類能繼承一個(gè)父類。相反,接口為人所知的特征是可以實(shí)現(xiàn)一個(gè)類借用類中的一些功能或是借用完全不同類的功能。
源地址:http://www.lirenedu.org/index.php?ack=xinwen&id=1086