10.物件導向(2)

dededea發表於2024-09-05

MODULE 10 物件導向

  1. 知道繼承的好處
  2. 會使用繼承
  3. 知道繼承之後成員變數以及成員方法的訪問特點
  4. 會方法的重寫,以及知道方法重寫的使用場景
  5. 會使用this關鍵字呼叫當前物件中的成員
  6. 會使用super關鍵字呼叫父類中的成員
  7. 會定義抽象方法以及抽象類
  8. 會重寫抽象方法

一.繼承

(一)什麼是繼承

1.我們定義了多個類,發現這些類中有很多重複性的程式碼,我們就定義了一個父類, 將相同的程式碼抽取出來放到父類中,其他的類直接繼承這個父類,就可以直接使用 父類中的內容

2.怎麼去繼承:extends

子類 extends 父類

3.注意:

(1)子類可以繼承父類中私有和非私有成員

(2)構造方法不能繼承

4.繼承怎麼學:

(1)繼承不要從是否”擁有”方面來學

要從是否能”使用”方面來學

(二)繼承如何使用

1.定義一個父類,在其中定義重複性的程式碼

2.定義一個子類繼承父類 -> extends

子類 extends 父類

3.建立子類物件,直接使用父類中非私有成員

(三)繼承中成員的訪問特點

1.成員變數

(1)子類和父類中的成員變數不重名

10.物件導向(2)

10.物件導向(2)

10.物件導向(2)

總結:子類可以呼叫自己的成員變數和父類非私有的成員變數;父類只能 呼叫父類中的成員變數

(2)子類和父類中的成員變數重名

10.物件導向(2)

10.物件導向(2)

10.物件導向(2)

總結:繼承條件下,不管成員變數是否重名,看等號左邊是誰,就先呼叫誰 中的成員,子類沒有,找父類(適用於多型)

2.成員方法

(1)方法不重名

(2)方法重名

10.物件導向(2) 10.物件導向(2)

10.物件導向(2)

總結:看new的是誰,先呼叫誰中的方法,子類沒有,找父類(適用於多型)

(四)方法的重寫

1.概述:子類中有一個和父類方法名以及引數列表相同的方法

2.前提:繼承

3.訪問:看new的是誰,先呼叫誰中的,如果new的是子類,呼叫子類的重寫方法,子 類沒有,找父親

4.檢查是否為重寫方法:在該方法上寫@Override

10.物件導向(2)

10.物件導向(2)

5.注意事項:

(1)子類重寫父類方法之後,許可權必須要保證大於等於父類許可權(指的是訪問權 限)public -> protected -> 預設 -> private

(2)子類方法重寫父類方法,方法名和引數列表要一樣

(3)私有方法不能被重寫,構造方法不能被重寫,靜態方法不能被重寫

(4)子類重寫父類方法之後,返回值型別應該是父類方法返回值型別的子類類 型

6.使用場景

(1)功能升級改造,子類需要對父類中已經實現好的功能進行重新改造

二.super和this關鍵字

(一)繼承中構造方法的特點

1.注意:new子類物件時,會先初始化父類(先走父類無參構造方法)

2.原因:每個構造方法的第一行,預設都會有一個super(),不寫也會自動提 供,super()代表的是父類無參構造,手動新增必須寫在第一行

10.物件導向(2)

10.物件導向(2)

10.物件導向(2)

(二)super和this的具體使用

1.super

(1)概述:代表的是父類引用

(2)作用:可以呼叫父類中的成員

(3)使用:

A.呼叫父類構造方法 -> 在子類中的構造中寫

super() -> 呼叫父類無參構造

super(實參) -> 呼叫父類有參構造

B.呼叫父類成員變數

super.成員變數名

C.呼叫父類成員方法

super.成員方法名(實參)

10.物件導向(2)

10.物件導向(2)

10.物件導向(2)

2.this

(1)概述:代表的是當前物件(哪個物件呼叫的this所在的方法,this就代表哪 個物件)

(2)作用:

A.區分重名的成員變數和區域性變數

B.呼叫當前物件中的成員

(3)使用:

A.呼叫當前物件的構造:在構造中寫

this():呼叫當前物件的無參構造

this(實參):呼叫當前物件的有參構造

B.呼叫當前物件的成員變數

this.成員變數名

C.呼叫當前物件的成員方法

this.成員方法名(實參)

(4)注意:

Super和this,只要在構造中寫,都必須在第一行,所以二者不能同時手寫 出來

10.物件導向(2)

10.物件導向(2)

(三)繼承的特點

1.繼承只能支援單繼承,不能多繼承

2.繼承支援多層繼承

3.一個父類可以有多個子類

4.構造方法不能繼承不能重寫

5.私有方法可以繼承,不能被重寫

6.靜態方法可以繼承,不能被重寫

(四)呼叫被private修飾的成員變數

10.物件導向(2)

三.抽象

(一)抽象的介紹

1.抽象怎麼來的

抽象共性方法,放到父類中,發現方法沒法實現,因為每個子類對此方法的實現 方式細節不一樣,此時方法體說不清道不明,可以定義成抽象方法

2.關鍵字:abstract

3.抽象方法:

修飾符 abstract 返回值型別 方法名(引數);

4.抽象類:

public abstract class 類名{}

5.注意:

(1)抽象方法所在的類一定是抽象類

(2)抽象類中不一定有抽象方法

(3)子類繼承父類之後,需要重寫父類中所有的抽象方法,不然編譯錯誤

(4)抽象類不能new物件,只能透過new子類物件調動重寫方法

6.抽象類可以看成是一類事物的標準,要求只要是屬於這一類的,都必須要擁有抽 象類中的方法,必須要給我實現,怎麼證明擁有了? -> 重寫

至於這個方法怎麼實現,就看子類重寫之後怎麼寫方法體了

10.物件導向(2)

10.物件導向(2)

10.物件導向(2)

(二)抽象注意事項

1.抽象類不能直接new物件,只能建立非抽象子類的物件

2.抽象類中不一定非得有抽象方法,但是抽象方法所在的類一定是抽象類

3.抽象類的子類,必須重寫父類中的所有抽象方法,除非該子類也是抽象類

4.抽象類中可以有成員變數,構造,成員方法

5.抽象類中可以有構造方法,是供子類建立物件時,初始化父類屬性使用的

相關文章