愛轉圈筆記
勤思、體悟、總結、分享
面向對象——繼承
繼承
什麼是繼承?
一個對象可以使用另一個對象非私有的屬性和方法,Java中所有的類都默認直接或間接的繼承了Object類。(子類繼承父類)
繼承的作用
1. 描述類之間的關係
2. 實現代碼複用
3. 實現多態的基礎
繼承的實現
abstract 關鍵字
包含了抽象方法的類一定是抽象類。
只定義方法,無具體實現代碼。例如 public abstract void run();
抽象方法必須被子類實現。
抽象類不能實例化。
抽象類只能用來繼承。
抽象方法的意義:將方法的設計和實現分離。
- 聲明父類:父類一般由abstract修飾,無法實例化;
- 子類通過extends關鍵字繼承父類
- 聲明子類:子類中聲明獨有的屬性和方法即可,或者重寫父類的abstract方法
JAVA中繼承的特點
- 單根性:JAVA中只能單繼承
- 傳遞性:子類具有父類及父類所繼承的特性
- 注意事項:
- 1.私有屬性不能繼承;
- 2.構造方法不能繼承;
- 3.不在同包中由默認訪問修飾符修飾的屬性和方法不能繼承;
- 4.繼承關係中的初始化:先調用父類的構造方法,再調用子類的構造方法。
方法的重載(overload)
在同一個類中,方法名相同,但參數的類型、個數、順序不同。
- 返回值不同、參數名稱不同均不構成重載。
方法的重寫(override)
子類繼承父類時,在子類中重寫父類的方法,方法名相同,參數列表相同。
- 子類權限修飾符可以>=父類的權限修飾符。
- 子類的返回值類型<=父類的返回值類型;子類聲明異常類型<=父類異常類型。
/**
* 狗狗類,繼承了動物類
* @author 愛轉圈
*
*/
public class Dog extends Animal {
//重寫父類Animal中的eat方法
@Override
public void eat(String food) {
//繼承了父類的屬性name
this.setName("狗狗1");
//可以通過get/set方法來訪問父類的屬性
System.out.println(this.getName()+"吃了"+food);
}
//重載eat方法,參數個數不同了
public void eat(String food1,String food2) {
this.setName("狗狗2");
System.out.println(this.getName()+"吃了"+food1+"後,又吃了"+food2);
}
}