認識繼承
不同型別的物件,相互之間經常有一定數量的共同點,例如,小明同學、小紅同學、小李同學,都共享學生的特性(班級、學號等),同時,每一個物件還定義了額外的特性使得他們與眾不同,例如小明的數學比較好,小紅的性格惹人喜愛;小李的力氣比較大,
繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用父類的功能,通過使用繼承,可以快速地創建新的類,可以提高代碼的重用,程式的可維護性,節省大量創建新類的時間 ,提高我們的開發效率,
擁有繼承關系的兩個類,一個是子類,一個是父類,使用關鍵字extends表示,
繼承的注意事項:
- 子類擁有父類物件所有的屬性和方法(包括私有屬性和私有方法),但是父類中的私有屬性和方法子類是無法訪問,只是擁有;
- 構造器不會被子類繼承,但是可以從子類中呼叫父類的構造器;
- 子類可以擁有自己屬性和方法,即子類可以對父類進行擴展;
- 子類可以用自己的方式實作父類的方法:方法重寫;
- Java中的所有類都是Object類的后代類;
- 當創建子類物件的時候,先去創建父類的實體,再創建子類的實體,如果有多個間接的父類,會從最頂端的父類開始創建物件,以此類推,創建任何Java物件,最先執行的總是java.lang.Object類的構造器,
- Java中只有單繼承 ,沒有多繼承;
- 當子類覆寫了父類方法后,子類的物件將無法訪問父類中被覆寫的方法,但可以在子類方法中呼叫父類中被覆寫的方法,如果需要在子類方法中呼叫父類中被覆寫的方法,則可以使用super(被覆寫的是實體方法)或者父類類名(被覆寫的是類方法)作為呼叫者來呼叫父類中被覆寫的方法,
方法重寫(覆寫)
方法重寫是指在一個子類里面,有一個方法與父類完全一樣(方法名字、引數個數、引數的型別)的方法,稱之為子類的這個方法重寫了父類的方法,
方法的重寫要遵循“兩同兩小一大”規則,“兩同”即方法名相同、形參串列相同;“兩小”指的是子類方法回傳值型別應比父類方法回傳值型別更小或相等,子類方法宣告拋出的例外類應比父類方法宣告拋出的例外類更小或相等;“一大”指的是子類方法的訪問權限應比父類方法的訪問權限更大或相等,
尤其需要指出的是,覆寫方法和被覆寫方法要么都是類方法,要么都是實體方法,不能一個是類方法,一個是實體方法,
super關鍵字
super可以理解為“父類的”,super是子類和父類交流的橋梁,但并不是父類的參考,super可以用來呼叫成員屬性、成員方法、構造器,
通常情況下,我們可以省略super,但是當子類和父類中定義了同名的屬性/方法時,我們要想在子類中呼叫父類中宣告的屬性/方法,則必須顯式的使用“super.屬性/方法”的方式,表明呼叫的是父類中宣告的屬性,
在子類加載時會默認呼叫父類的無參構造器,若想呼叫父類的有參構造器,我們也可以在子類的構造器中使用super關鍵字呼叫父類的有參構造器,但是super陳述句必須在構造器的首行,
所以this和super兩種構造呼叫,不能同時使用,
/*
super關鍵字的用法有三種:
1.在子類的成員方法中,訪問父類的成員變數,
2.在子類的成員方法中,訪問父類的成員方法,
3.在子類的構造方法中,訪問父類的構造方法,
*/
public class Zi extends Fu {
int num = 20;
public Zi(){
super(1);
}
public void methodZi(){
System.out.println(super.num); //父類中的num
}
public void method(){
super.method(); //訪問父類中的method
System.out.println("子類方法");
}
}
public class Fu {
int num = 10;
public Fu(){
System.out.println("父類的無參構造方法");
}
public Fu(int a){
System.out.println("父類的有參構造方法 a="+a);
}
public void method(){
System.out.println();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/244119.html
標籤:Java
上一篇:訊息佇列之activeMQ
