第七章 類的深入解析
1. 繼承
1.1 類繼承的方法:在Java中,子類對父類的繼承是在類的聲明中使用extends關鍵字來指明的。其一 般格式爲:[類修飾符] class <子類名> extends <父類名>{ 類體內容 }。一個類只能直接繼承一個 父類,一個父類可以有多個子類。
1.2 成員變量的繼承和隱藏:基於父類創建子類時,子類可以繼承父類的成員變量和成員方法。但是, 如果在父類和子類中同時聲明瞭一個同名變量,則這兩個變量在程序運行時同時存在。即:父類的 成員變量用於父類方法,子類的成員變量用於子類方法,互不干擾。
1.3 方法的繼承與覆蓋:子類可以繼承父類中所有可以被子類訪問的成員方法,但如果子類重新定義了 從父類繼承的方法,此時父類的這個方法在子類中將不復存在,此時稱爲子類方法覆蓋了父類的方 法,簡稱方法的覆蓋(override)。
1.4 構造方法的繼承:當通過子類創建對象時,系統會首先調用父類的無參構造方法,然後纔會執行子 類的構造方法。如果想要調用父類的有參構造方法,可以使用super關鍵字。
2. 多態性:多態性是指同名的不同方法在程序中共存。即同一個方法定義幾個版本,程序運行時根據不 同情況執行不同的版本。“一個對外接口,多個內在實現方法”
多態性的實現方式:
(1)方法覆蓋實現多態性
此時通過子類對繼承父類的方法進行重定義來實現。
(2)方法重載實現多態性
通過定義多個同名的不同方法來實現,系統會根據參數(類型、個數、順序)的不同來區分不 同方法。
3.抽象類:抽象類中通常只包含抽象方法(只有方法的聲明,沒有方法體),而方法的具體實現則由其派 生出的各子類來完成,這使得程序的功能描述和功能實現得以分離。此外,由於一個抽象類可派生多 個子類,因此,抽象類中的一個抽象方法可以在多個子類中有多種實現方式,這也實現了類的多態性
(1)抽象類的定義格式通常如下:
public abstract class Plane { //聲明抽象類
private String shape; //聲明成員變量
......
public abstract double area(); //聲明抽象方法,注意:分號必不可少
......
}
(2)抽象類是不能實例化的,也就是說,不能基於抽象類來創建對象。
(3)抽象類中也可以含有普通成員變量和成員方法。但是,抽象方法只能出現在抽象類中。也就 是說,含有抽象方法的類必須是抽象類,非抽象類不能包含抽象方法。
4.接口:接口是由常量和抽象方法組成的特殊類。聲明接口的一般格式如下:
[public] interface 接口名 [extends 父接口名列表]{
//常量聲明
//抽象方法聲明
}
接口與抽象類之間的關係:
(1)接口中只能定義常量和抽象方法,而抽象類中可以聲明其他成員變量和成員方法;
(2)一個類同時只能繼承一個抽象類,但可以同時實現多個接口;
(3)抽象類的繼承用extends,接口的實現用implements。