1. 程式人生 > 其它 >第五章 繼承與多型

第五章 繼承與多型

一、小結

  本章主要講解了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 列舉出面向物件的三大特性。

封裝、繼承、多型