天天看點

繼承和多态

子類與父類

  • 類之間的繼承關系是一種由已經存在的類建立新類的機制,可以有效地實作代碼的重複使用
  • 可以先定義一個共有屬性的一般類(父類或超類),在此基礎上定義新的類(子類)
  • 子類可以繼承父類的屬性和方法(子類不繼承父類的構造方法),也可以定義自己獨有的屬性和方法
  • 父類可以是Java類庫中的類,也可以是自己編寫的類
  • Java不支援多重繼承,即子類隻能有一個父類

類繼承的文法格式:

class 子類名 extends 父類名
 {
 子類的類體
 }      

• 如果一個類的聲明中沒有使用關鍵字extends,這個類被系統預設為是Object類的子類,Object類是java.lang中的類

類繼承的使用:

• 如果子類繼承了父類的成員變量和成員方法,就可以将它們作為己用,就像在子類中定義的一樣

• 子類如果沒有繼承父類的某些成員變量或成員方法,則子類無法對它們進行通路或調用

成員變量的隐藏:

• 子類中定義的新的變量如果和繼承過來的變量名稱相同,則會隐藏繼承過來的成員變量

class A{
 int first=10;
 int second=20;
}
class B extends A{
 int first=100;
 double second=200; //B的對象使用first和second時,A中的被隐藏
 int third=300;
 void change()
 { first+=50; second+=50; third+=50; }
}      

方法的重寫:

• 方法的重寫也是多态的一種表現

• 方法的重寫是指子類可以改寫父類方法所實作的功能,但是子類重寫的方法必須與父類中的對應方法有相同的名稱、傳回類型和參數清單

• 如果父類中的方法被子類重寫,則子類的對象調用這個方法時,實際運作的是子類中改寫之後的方法,父類中的相應方法被隐藏了起來

關鍵字super:

• 關鍵字super代表目前對象的父類部分

• super有兩種用法

1.子類使用super調用父類的構造方法

2.子類使用super操作父類中被子類隐藏的成員變量和方法

• 子類不繼承父類的構造方法

1.子類中有些初始化工作需要調用父類的構造方法幫助實作,需要用super關鍵字

2.子類構造方法中調用父類構造方法的文法為:

super(參數清單)

4.子類構造方法中使用super調用父類構造方法時,必須把調用語句放在最開始

•子類使用super操作父類中被子類隐藏的成員變量和方法

1.super.變量名

2.super.方法名(參數清單)

子類為什麼不能繼承父類的構造方法

構造方法的定義是與類的名稱相同:如果子類能夠繼承父類的構造方法,那麼在子類的構造方法中就有不同于子類名稱的構造法;這與構造方法的定義不符,是以子類是不能繼承父類的構造方法的。