2019-10-23-22:58:23 目錄 1.繼承 2.區分成員變數重名的方法 3.區分成員方法重名的方法 4.繼承中重寫與重載的區別 5.繼承中覆蓋重寫的註意事項 6.繼承中覆蓋重寫的設計原則 7.父子類構造方法的特點 8.Super關鍵字的三種使用方法 9.This關鍵字的三種用法 10.S ...
2019-10-23-22:58:23
目錄
1.繼承
2.區分成員變數重名的方法
3.區分成員方法重名的方法
4.繼承中重寫與重載的區別
5.繼承中覆蓋重寫的註意事項
6.繼承中覆蓋重寫的設計原則
7.父子類構造方法的特點
8.Super關鍵字的三種使用方法
9.This關鍵字的三種用法
10.Super和This關鍵字圖解
繼承
繼承: 是面向對象軟體技術當中的一個概念,與多態、封裝共為面向對象的三個基本特征。 繼承可以使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等。
註意:
1.繼承是多態的前提,如果沒有繼承就沒有多態
2.在繼承關係中,"子類就是一個父類",也就是說,子類可以被當作父類看待
作用:繼承主要解決的問題就是共性抽取
子類特點:
1.子類可以擁有父類的"內容"
2.子類還可以擁有自己專有的內容
Java中繼承的三個特點:
1.單繼承
2.多級繼承
3.多種繼承(俗話就是有很多子孫)
繼承的格式:
定義父類的格式:(普通類的定義)
public class 父類名稱{
語句體
}
定義子類的格式:
public class 子類名稱 extends 父類名稱{
語句體
}
註意:在父子類繼承關係當中,如果成員變數重名,則創建子類對象時,訪問有兩種方式
1.直接通過子類對象訪問成員變數
等號左邊是誰,就優先用誰,沒有則向上找
2.間接通過成員方法訪問成員變數
改方法屬於誰,就優先用誰,沒有則向上找
package demopra;
public class Fu {
int numFu = 20;
int num = 2;
public void methodFu() {
int num = 200;
System.out.println(num);
}
}
package demopra;
public class Zi extends Fu {
int numZi = 10;
int num = 1;
public void methodZi(){
int num = 100;
System.out.println(num);
}
}
1 package demopra;
2
3 public class InheritanceExample {
4 public static void main(String[] args) {
5 //創建一個父類對象
6 Fu fu = new Fu();
7 //只能使用父類的內容,沒有任何子類的內容
8 System.out.println(fu.numFu);//20
9 //創建一個子類對象
10 Zi zi = new Zi();
11
12 System.out.println(zi.numFu);//20
13
14 System.out.println(zi.numZi);//10
15 //等號左邊是誰,就優先調用誰
16 System.out.println(zi.num);//1
17
18 //這個方法是子類的,如果沒有就向上找,絕不會向下找,向上找不到就會報錯
19 zi.methodZi();//100
20 //這個是在父類當中定義的
21 zi.methodFu();//200
22
23 }
24 }
區分成員變數重名的方法
局部變數:
1.本類的成員變數
2.父類的成員變數
直接寫成員變數名:
1.this.成員變數名
2.super.成員變數名
區分成員方法重名的方法
創建的對象時誰,就優先用誰,如果沒有則向上找,絕對不會向下找子類的(成員方法和成員變數一樣)
package demopra;
public class Fu {
public void method(){
int num = 30;
System.out.println(num);
}
}
1 package demopra;
2 public void method(){
3 int num = 3;
4 System.out.println(num);
5 }
6 }
1 package demopra;
2
3 public class InheritanceExample {
4 public static void main(String[] args) {
5 //創建一個子類對象
6 Zi zi = new Zi();
7 //創建的是子類對象,所以優先用子類方法
8 zi.method();//3
9 }
10 }
繼承中重寫與重載的區別
重寫(override):在繼承關係當中,方法的名稱一樣,參數列表[也一樣],也叫覆蓋,覆寫
重載(overload):方法的名稱一樣,參數列表[不一樣]
繼承中覆蓋重寫的註意事項
1.必須保證父子類之間方法的名稱相同,參數列表也相同,@Override:寫在方法前面,用來檢測是不是有效的正確覆蓋重寫,這個註解就算不寫,只要滿足要求,也是正確的方法覆蓋重寫。
2.子類方法的返回值必須[小於等於]父類方法的返回值範圍。.
小擴展提示:java.Lang.object類是所有類的公共最高父類(祖宗類),java. lang . String就是object的子類
3.子類方法的許可權必須 [大於等於]父類方法的許可權修飾符。
小擴展提示:public > protected > (default) > private
備註:(default)不是關鍵字default. 而是什麼都不寫,留空。
繼承中覆蓋重寫的設計原則
設計原則:
對於已經投入使用的類,儘量不要進行修改。推薦定義一個新的類,來重覆利用其中共性內容,井且添加改動新內容。
父子類構造方法的特點
1.子類構造方法當中有一個預設隱含的“super()"調用,所以一定是先調用的父類構造,後執行的子類構造。
2.子類構造可以通過super關鍵字來調用父類重載構遣。
3. super的父類構造調用,必須是子類構造方法的第一個語句。不能一個子類構造調用多次super構造。
總結:
子類必須調用父類構造方法,不寫則贈送super();寫了則用寫的指定的super調用,super只能有一個,還必須是第一個。
Super關鍵字的三種使用方法
1.在子類的成員方法中,訪問父類的成員變數。
2.在子類的成員方法中,訪問父類的成員方法。
3.在子類的構造方法中,訪問父類的構造方法。
1 package demopra;
2
3 public class Zi extends Fu {
4 int numZi = 10;
5 // int num = 1;
6
7 public Zi() {
8 super();
9 }
10
11 public void methodZi(){
12 // int num = 100;
13 System.out.println(super.num);//2父類中的num
14 }
15
16 public void method(){
17 // int num = 3;
18 super.method();//訪問父類中的method()
19 System.out.println("子類方法執行啦!!!");
20 }
21 }
This關鍵字的三種用法
1. 在本類的成員方法中,訪問本類的成員變數。
2.在本類的成員方法中,訪問本類的另一 個成員方法。
3.在本類的構造方法中,訪問本類的另一 個構造方法。
在第三種用法當中要註意:
A. this(... )調用也必須是構造方法的第一 個語句,唯一一個。
B. super和this兩種構造調用,不能同時使用。
Super和This關鍵字圖解