第五章 繼承與多型
一、小結
本章主要講解了Java語言面向物件的特性,包括繼承簡介、子類的繼承、多型、抽象類、final修飾符、內部類。通過本章的學習,讀者應該熟練掌握Java語言中繼承和多型的操作;重點理解super關鍵字和final修飾符。另外,需要掌握抽象類和抽象方法的規則,通過程式更好理解抽象類的使用。
二、測驗
抽象方法只有函式宣告,沒有函式體。
super關鍵字:子類和父類成員變數或成員方法同名時呼叫
三、習題
1、建立如下類:Circle類(圓形)、Square類(正方形)和Point類(點)。Point根據(x,y)座標定位。Circle除了一個(x,y)座標點之外,還有半徑屬性。正方形除了一個(x,y)座標點之外,還有邊長。請問:這些類中哪些是超類,哪些是子類?
Java中的超類就是父類
Point類是超類,Circle類和Square類是子類。
2、關鍵字組合問題。
(1)abstract方法能否是final型別的? 不行
abstract修飾的類需要被子類繼承,abstract修飾的方法需要子類重寫,但是final修飾的類不能被繼承,final修飾的方法也不能被子類重寫。
(2)abstract方法能否是static型別的? 不行
因為靜態方法是屬於類的,所以靜態方法必須滿足給類呼叫,如果通過類無法呼叫,那麼這種靜態方法肯定是不對的。為了達到這一要求,static方法就必須有方法體,即已經實現了,也就不是抽象方法了。
另:抽象方法也不能被private修飾:因為abstract修飾的方法必須通過子類重寫才有效,而private修飾的方法對子類不可見,即父類中如果存在private abstract void out();而子類中有private void out(){},則它們是兩個不同的方法,子類中的out方法不是對父類的重寫,而是屬於子類獨有的方法。
(3)能否定義一個私有靜態(private static)方法? 不行
private:在學習繼承的過程中,我們知道,如果在父類中修飾了一個private的方法,子類繼承之後,對子類也是不可見的。子類重寫則在編譯階段就會報錯。
static:Java中static方法不能被覆蓋,因為方法覆蓋是基於執行時動態繫結的,而static方法是編譯時靜態繫結的。static方法類的任何例項都不相關,所以概念上不適用。
5-3 簡單說明方法過載與方法覆蓋的區別。
方法的過載是指在一個類中,出現多個方法名相同,但引數個數或引數型別不同的方法。方法覆蓋體現了子類補充或者改變父類方法的能力,通過覆蓋,可以使一個方法在不同的子類中表現出不同的行為。
5-4 列舉出面向物件的三大特性。
封裝、繼承、多型