在編寫子類時,我們仍然可以聲明成員變量,一種特殊的情況就是,所聲明的成員變量的名字和從父類繼承來的成員變量的名字相同,聲明的類型可以不同,在這種情況下,子類就會隱藏所繼承的成員變量。
子類隱藏繼承的成員變量的特點如下:
(1)子類對象以及子類自己定義的方法操作與父類同名的成員變量是指子類重新聲明的這個成員變量。
(2)子類對象仍然可以調用從父類繼承的方法操作被子類隱藏的成員變量,也就是說,子類繼承的方法所操作的成員變量一定是被子類繼承或隱藏的成員變量。
注意:
子類繼承的方法只能操作子類繼承和隱藏的成員變量。子類新定義的方法可以操作子類繼承和子類新聲明的成員變量,但無法操作子類隱藏的成員變量。
子類通過重寫可以隱藏已繼承的方法,方法重寫也稱為方法覆蓋。如果子類可以繼承父類的某個方法,那么子類就有權利重寫這個方法。方法重寫是指子類中定義一個方法,這個方法的類型和父類的方法的類型一致或者是父類的方法的類型的子類型,并且這個方法的名字、參數(shù)個數(shù)、參數(shù)的類型和父類的方法完全相同。子類如此定義的方法稱作子類重寫的方法,不屬于新增的方法。
子類通過方法的重寫可以隱藏繼承的方法,并把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。如果父類的方法f()可以被子類繼承,子類就有權利重寫f(),一旦子類重寫了父類的方法f(),就隱藏了繼承的方法f(),那么子類對象調用方法f()一定調用的是重寫方法f()。如果子類沒有重寫,而是繼承了父類的方法f(),那么子類創(chuàng)建的對象當然可以調用f()方法,只不過方法f()產(chǎn)生的行為和父類的相同而已。
重寫方法既可以操作繼承的成員變量、調用繼承的方法,也可以操作子類新聲明的成員變量、調用新定義的其他方法,但無法操作被子類隱藏的成員變量和方法。如果子類想使用被隱藏的方法或成員變量,必須使用關鍵字super。
注意:
重寫父類的方法時,不允許降低方法的訪問權限,但可以提高訪問權限,訪問限制修飾符按訪問權限從高到低的排列順序是:public、protected、友好的、private。例如:子類重寫父類的方法f,該方法在父類中的訪問權限是protected級別,子類重寫時不允許級別低于protected。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程