繼承部分總結
一、繼承總結:
1.繼承的概念:繼承是指一個類的定義可以基於另外一個已經存在的類,即子類基於父類,從而實現父類代碼的重用,子類能吸收已有類的數據屬性和行為,並能擴展新的能力。
2.繼承的形式:
【訪問權限修飾符】【修飾符】子類名 extends 父類名{子類體}
例如:public class Shape {
public void draw(){}
}
public class Circle extends Shape{
public double getDiameter(){
return 0.0;
}
}
3.繼承的作用:代碼復用。
子類對象可以直接調用父類的屬性和方法。
4.構造方法與繼承:
①子類構造方法總是先調用父類構造方法。默認情況下,調用父類無參構造方法。可以在子類構造方法的第一行,使用super關鍵字調用父類任意一個構造方法。
②子類調用父類構造方法的原因:Java 語言中,要求子類有責任保證它所繼承的父類盡快進入到一個穩定、完整的狀態中。如果沒有這個約束,那麽子類的某個繼承自父類的方法可能會使用到父類中的一些變量,而這些變量並沒有進行初始化,從而產生一些難以預料的後果。
③子類構造方法的執行詳解:
a.必須將調用父類構造方法的這條語句放在子類構造方法的第一條語句位置。如果第一條語句沒有調用父類的構造方法,系統將會自動地在這個位置上插入一條調用父類默認構造方法的語句
b由於默認的構造方法不帶參數,所以,如果在父類中定義了帶參數的構造方法,而沒有定義不帶參數的構造方法將會出現編譯錯誤。這也正是建議大家在定義帶參數的構造方法時,一定要定義一個不帶參數的構造方法的原因所在。
c父類中那些帶參數的構造方法,子類將不會自動地調用它們,必須人工地將調用它們的語句寫入子類的構造方法中。
二、this總結:
1.this關鍵字用途:
①使用this關鍵字在自身構造方法內部引用其它構造方法。
②使用this關鍵字代表自身類的對象。
直接使用this;
使用this關鍵字引用成員變量;
使用this關鍵字引用成員方法。
③註意:this關鍵字必須放在非靜態方法裏面。
2.this引用成員變量:在一個類的方法或構造方法內部,可以使用“this.成員變量名”這樣的格式來引用成員變量名,常常用來區分同名的成員變量和局部變量。
3.this引用構造方法:在一個類的構造方法內部,也可以使用this關鍵字引用其它的構造方法,這樣可以降低代碼的重復,也可以使所有的構造方法保持統一,這樣方便以後的代碼修改和維護,也方便代碼的閱讀。
4.this引用成員方法:在一個類的內部,成員方法之間的互相調用時也可以使用“this.方法名(參數)”來進行引用。
三、super總結:
1.super關鍵字用途:
①在子類構造方法中要調用父類的構造方法,需要註意:super語句只能出現在子類構造方法體的第一行。
②當子類方法體中的局部變量或者子類的成員變量與父類成員變量同名時,即子類局部變量覆蓋父類成員變量時,用“super.成員變量名”來引用父類成員變量。
③當子類的成員方法覆蓋了父類的成員方法時,也就是子類和父類有完全相同的方法定義(方法體可以不同),此時,用“super.方法名(參數列表)”的方式訪問父類的方法。
與this的區別,this通常指代當前對象,super通常指代父類。
2.子類構造方法中要調用父類構造方法:在子類構造方法中要調用父類的構造方法,需要註意:super語句只能出現在子類構造方法體的第一行。
3.super調用父類成員變量或方法:子類中的成員變量或方法與父類中的成員變量或方法同名。因為子類中的成員變量或方法名優先級高,所以子類中的同名成員變量或方法就隱藏了父類的成員變量或方法,但是我們如果想要使用父類中的這個成員變量或方法,就需要用到super。
4.this和super:this通常指代當前對象,super通常指代父類對象。
例:
class Person {
public static void prt(String s) {
System.out.println(s);
}
Person() {
prt("A Person.");
}
Person(String name) {
prt("A person name is:" + name);
}
}
public class Chinese extends Person {
Chinese() {
super(); // 調用父類無形參構造方法(1)
prt("A chinese.");// (4)
}
Chinese(String name) {
super(name);// 調用父類具有相同形參的構造方法(2)
prt("his name is:" + name);
}
Chinese(String name, int age) {
this(name);// 調用當前具有相同形參的構造方法(3)
prt("his age is:" + age);
}
public static void main(String[] args) {
Chinese cn = new Chinese();
cn = new Chinese("kevin");
cn = new Chinese("kevin", 22);
}
}
輸出:A Person.
A chinese.
A person name is:kevin
his name is:kevin
A person name is:kevin
his name is:kevin
his age is:22
四、方法覆蓋總結:
1.方法覆蓋的定義:
子類可以重寫父類中某一個方法,稱為方法覆蓋,也稱方法重寫,是繼承中非常重要的知識點。如果子類需要修改從父類繼承到的方法的方法體,就可以使用方法覆蓋。
2.方法覆蓋的原則:同名,同參,同返回值,訪問權限不能縮小。
五、final修飾符總結:
1.final修飾屬性、局部變量,值不能被修改。
2.final修飾類,不能被繼承。
3.final修飾方法,不能被子類覆蓋。
繼承部分總結