前面介紹了面向對象的繼承思想,繼承思想其核心是代碼的復用和程序功能高度的擴展性。繼承可以直接實現代碼的復用,功能的擴展性是指繼承後的類在父類的基礎上增加新的行為,或者對父類的行為進行擴展,實現同一個行為具有不同的實現代碼。
例1:在父類的基礎上增加新的行為
在『深入了解面向對象的繼承思想』一節中,給出了一個案例,案例內容及案例代碼參見『深入了解面向對象的繼承思想』一節。案例中類繼承結構如下圖所示:

圖中的紙質圖書類,電子圖書類、視頻類和音頻類均繼承於Product類,被繼承的Product稱為父類,繼承的紙質圖書類,電子圖書類、視頻類和音頻類稱為子類,子類繼承父類的所有屬性和方法。現在要求EBook類除了輸出Product類的公有屬性外,還要輸出EBook類的私有屬性。從案例代碼中可以看出,EBook類的父類提供了輸出公有屬性的行為,代碼如下:
EBook類雖然可以調用父類的outProduct()方法輸出公有屬性,但無法輸出EBook類的私有屬性。這種情況下,可以在EBook類增加outEBook()方法,用於輸出EBook類的私有屬性,代碼如下:
代碼首先調用父類的outProduct()方法輸出公有屬性,然後再輸出該類的私有屬性。
例2:擴展父類的行為
例1要求EBook類除了輸出父類Product類的公有屬性外,還要求輸出EBook類的私有屬性,例1給出的解決方案是在EBook類增加outEBook()方法,該方法首先調用父類的outProduct()方法輸出父類的公有屬性,然後再輸出EBook類的私有屬性。
其實,還有一種解決方案,在EBook類中重寫父類的outProduct(),這樣當EBook對象調用outProduct()方法時,其父類的outProduct()方法被忽略,而執行EBook類的outProduct()方法。代碼如下:
例2給出的子類重寫父類的方法,就是面向對象的多態概念。在程序運行過程中,子類的行為代替了父類的行為。父類Product類有輸出屬性的方法outProduct(),而它的子類EBook類、Video類、Audio類、PaperBook類也都有這個方法。換言之,對於不同的出版物產品,都有自己輸出屬性的方法,這就構成了對象的多態概念。
多態也就是多種表現形態,前面講的方法的重載和本節中方法的重寫是Java多態性的不同表現。方法重載是一個類中多態性的表現,方法重寫是父類與子類之間多態性的一種表現。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載。如果在子類中定義某方法與其父類有相同的名稱和參數,就稱為方法的重寫。
■ 知識點撥
多態是面向對象編程的一大特徵,利用多態特徵編程,可以讓應用程式具有良好的擴展性。通過子類對父類方法的重寫和類方法的重載,可以在不改變原有代碼的情況下擴展程序的功能。■ 思考與練習
應用eclipse開發工具建立ProductManage項目,實現教材內容中的Product類和EBook類,並實現例1和例2的內容,Product類和EBook類的屬性可以參考『深入了解面向對象的繼承思想』一節。