MODULE 10 物件導向
- 知道繼承的好處
- 會使用繼承
- 知道繼承之後成員變數以及成員方法的訪問特點
- 會方法的重寫,以及知道方法重寫的使用場景
- 會使用this關鍵字呼叫當前物件中的成員
- 會使用super關鍵字呼叫父類中的成員
- 會定義抽象方法以及抽象類
- 會重寫抽象方法
一.繼承
(一)什麼是繼承
1.我們定義了多個類,發現這些類中有很多重複性的程式碼,我們就定義了一個父類, 將相同的程式碼抽取出來放到父類中,其他的類直接繼承這個父類,就可以直接使用 父類中的內容
2.怎麼去繼承:extends
子類 extends 父類
3.注意:
(1)子類可以繼承父類中私有和非私有成員
(2)構造方法不能繼承
4.繼承怎麼學:
(1)繼承不要從是否”擁有”方面來學
要從是否能”使用”方面來學
(二)繼承如何使用
1.定義一個父類,在其中定義重複性的程式碼
2.定義一個子類繼承父類 -> extends
子類 extends 父類
3.建立子類物件,直接使用父類中非私有成員
(三)繼承中成員的訪問特點
1.成員變數
(1)子類和父類中的成員變數不重名
總結:子類可以呼叫自己的成員變數和父類非私有的成員變數;父類只能 呼叫父類中的成員變數
(2)子類和父類中的成員變數重名
總結:繼承條件下,不管成員變數是否重名,看等號左邊是誰,就先呼叫誰 中的成員,子類沒有,找父類(適用於多型)
2.成員方法
(1)方法不重名
(2)方法重名
總結:看new的是誰,先呼叫誰中的方法,子類沒有,找父類(適用於多型)
(四)方法的重寫
1.概述:子類中有一個和父類方法名以及引數列表相同的方法
2.前提:繼承
3.訪問:看new的是誰,先呼叫誰中的,如果new的是子類,呼叫子類的重寫方法,子 類沒有,找父親
4.檢查是否為重寫方法:在該方法上寫@Override
5.注意事項:
(1)子類重寫父類方法之後,許可權必須要保證大於等於父類許可權(指的是訪問權 限)public -> protected -> 預設 -> private
(2)子類方法重寫父類方法,方法名和引數列表要一樣
(3)私有方法不能被重寫,構造方法不能被重寫,靜態方法不能被重寫
(4)子類重寫父類方法之後,返回值型別應該是父類方法返回值型別的子類類 型
6.使用場景
(1)功能升級改造,子類需要對父類中已經實現好的功能進行重新改造
二.super和this關鍵字
(一)繼承中構造方法的特點
1.注意:new子類物件時,會先初始化父類(先走父類無參構造方法)
2.原因:每個構造方法的第一行,預設都會有一個super(),不寫也會自動提 供,super()代表的是父類無參構造,手動新增必須寫在第一行
(二)super和this的具體使用
1.super
(1)概述:代表的是父類引用
(2)作用:可以呼叫父類中的成員
(3)使用:
A.呼叫父類構造方法 -> 在子類中的構造中寫
super() -> 呼叫父類無參構造
super(實參) -> 呼叫父類有參構造
B.呼叫父類成員變數
super.成員變數名
C.呼叫父類成員方法
super.成員方法名(實參)
2.this
(1)概述:代表的是當前物件(哪個物件呼叫的this所在的方法,this就代表哪 個物件)
(2)作用:
A.區分重名的成員變數和區域性變數
B.呼叫當前物件中的成員
(3)使用:
A.呼叫當前物件的構造:在構造中寫
this():呼叫當前物件的無參構造
this(實參):呼叫當前物件的有參構造
B.呼叫當前物件的成員變數
this.成員變數名
C.呼叫當前物件的成員方法
this.成員方法名(實參)
(4)注意:
Super和this,只要在構造中寫,都必須在第一行,所以二者不能同時手寫 出來
(三)繼承的特點
1.繼承只能支援單繼承,不能多繼承
2.繼承支援多層繼承
3.一個父類可以有多個子類
4.構造方法不能繼承不能重寫
5.私有方法可以繼承,不能被重寫
6.靜態方法可以繼承,不能被重寫
(四)呼叫被private修飾的成員變數
三.抽象
(一)抽象的介紹
1.抽象怎麼來的
抽象共性方法,放到父類中,發現方法沒法實現,因為每個子類對此方法的實現 方式細節不一樣,此時方法體說不清道不明,可以定義成抽象方法
2.關鍵字:abstract
3.抽象方法:
修飾符 abstract 返回值型別 方法名(引數);
4.抽象類:
public abstract class 類名{}
5.注意:
(1)抽象方法所在的類一定是抽象類
(2)抽象類中不一定有抽象方法
(3)子類繼承父類之後,需要重寫父類中所有的抽象方法,不然編譯錯誤
(4)抽象類不能new物件,只能透過new子類物件調動重寫方法
6.抽象類可以看成是一類事物的標準,要求只要是屬於這一類的,都必須要擁有抽 象類中的方法,必須要給我實現,怎麼證明擁有了? -> 重寫
至於這個方法怎麼實現,就看子類重寫之後怎麼寫方法體了
(二)抽象注意事項
1.抽象類不能直接new物件,只能建立非抽象子類的物件
2.抽象類中不一定非得有抽象方法,但是抽象方法所在的類一定是抽象類
3.抽象類的子類,必須重寫父類中的所有抽象方法,除非該子類也是抽象類
4.抽象類中可以有成員變數,構造,成員方法
5.抽象類中可以有構造方法,是供子類建立物件時,初始化父類屬性使用的