在編寫子類別時,我們仍然可以聲明成員變量,一種特殊的情況就是,所聲明的成員變數的名字和從父類別繼承來的成員變數的名字相同,聲明的類型可以不同,在這種情況下,子類別就會隱藏所繼承的成員變數。
子類別隱藏繼承的成員變數的特性如下:
(1)子類別物件以及子類別自己定義的方法操作與父類別同名的成員變數是指子類別重新宣告的這個成員變數。
(2)子類別物件仍然可以呼叫從父類別繼承的方法操作被子類別隱藏的成員變量,也就是說,子類別繼承的方法所操作的成員變數一定是被子類別繼承或隱藏的成員變數。
注意:
子類別繼承的方法只能操作子類別繼承和隱藏的成員變數。子類別新定義的方法可以操作子類別繼承和子類別新宣告的成員變量,但無法操作子類別隱藏的成員變數。
子類別透過重寫可以隱藏已繼承的方法,方法重寫也稱為方法覆寫。如果子類別可以繼承父類別的某個方法,那麼子類別就有權利重寫這個方法。方法重寫是指子類別中定義一個方法,這個方法的類型和父類別的方法的類型一致或是父類別的方法的類型的子類型,並且這個方法的名字、參數數量、參數的類型和父類別的方法完全相同。子類別如此定義的方法稱作子類別重寫的方法,不屬於新增的方法。
子類別透過方法的重寫可以隱藏繼承的方法,並將父類別的狀態和行為改變為自身的狀態和行為。如果父類別的方法f()可以被子類別繼承,子類別就有權利重寫f(),一旦子類別重寫了父類別的方法f(),就隱藏了繼承的方法f(),那麼子類別物件呼叫方法f()一定呼叫的是重寫方法f()。如果子類別沒有重寫,而是繼承了父類別的方法f(),那麼子類別建立的物件當然可以呼叫f()方法,只不過方法f()產生的行為和父類別的相同而已。
重寫方法既可以操作繼承的成員變數、呼叫繼承的方法,也可以操作子類別新宣告的成員變數、呼叫新定義的其他方法,但無法操作被子類別隱藏的成員變數和方法。如果子類別想使用被隱藏的方法或成員變量,則必須使用關鍵字super。
注意:
重寫父類別的方法時,不允許降低方法的存取權限,但可以提高存取權限,存取限制修飾符按存取權限從高到低的排列順序是:public、protected、友善的、private。例如:子類別重寫父類別的方法f,該方法在父類別中的存取權限是protected級別,子類別重寫時不允許級別低於protected。