物件導向三大特徵之一 繼承

2021-10-10 19:12:03 字數 3334 閱讀 1717

概述

多個類中存在相同的屬性和行為時,我們可以將這些內容抽取到單獨的乙個類中,那麼多個類就無需在定義這些屬性和行為,只要去繼承這個單獨的類即可。

其中,多個類稱為子類或者派生類,單獨的那乙個類稱為父類,超類,基類

繼承描述的是事物之間的所屬關係,這種關係是:is-a關係。在繼承關係中,子類就是乙個父類,也就是說子類可以被當做父類看待 。

例如:父類是員工,子類是講師,「那麼講師就是乙個員工」is-a—是乙個

一般情況下,父類更通用,子類更具體。我們可以通過繼承,使多種事物之間形成一種關係體系

定義

繼承的格式

通過extends關鍵字,可以宣告乙個子類繼承乙個父類

public

class

fuclass

public

class

ziclass

extends

fuclass

/*

定義乙個員工類employee

*/public

class

employee}/*

定義乙個教師類繼承員工類

*/public

class

teacher

extends

employee}/*

定義乙個測試類

*/public

class

test

}

繼承後的特點–成員變數

當類之間產生關係後,其中各類中的成員變數有哪些影響?

成員變數不重名的

如果子類父類中定義的成員變數名字不重複,這時的訪問時沒有任何影響的

public

class

fupublic

class

ziextendsfu}

public

class

testextendsfield

}//10

//20

成員變數重名

如果子類父類**現重名的成員變數,這時的訪問時有影響的

public

class

fupublic

class

ziextendsfu}

// 20

// 20

在父子類的繼承關係中,如果成員變數重名,則建立子類物件時,訪問有兩種方式:

1.直接通過子類物件訪問成員變數:等號左邊是誰,就優先找誰,如果沒有就向上找

2.間接通過成員方法訪問成員變數:該方法屬於誰,就優先用誰,如果沒有就向上找

子父類**現了同名的成員變數時,在子類中想要訪問父類中的非私有成員變數時,需要使用super

關鍵字,修飾父類的成員變數,類似於this

super

.父類成員變數名

子類方法**需要修改

public

class

ziextends

fu}

備註:fu類中的成員變數是非私有的,子類中可以直接訪問,若fu類中的成員變數私有了,子類不能直接訪問

通常編碼時,我們遵循的是封裝的原則,使用private關鍵字修飾成員變數,那麼如何訪問父類中的私有成員變數。可以借助於父類中的提供的公共的set***和get***方法

繼承後的特點----方法

成員方法不重名:

如果子類父類**現不重名的成員方法,這時的呼叫沒任何影響,物件在呼叫方法時,會現在子類中去查詢有沒有對應的方法,若子類中存在該方法,那麼就執行子類中的方法。若子類當中不存在該方法,就會執行父類中的成員方法

public

class

fupublic

class

ziextendsfu}

public

class

test

}}

如果成員方法重名----重寫

如果出現重名的成員方法,這時的訪問是一種特殊情況,叫做方法的重寫(override)

public

classfu}

public

class

ziextendsfu}

public

class

test

}

重寫的應用

子類可以根據需要定義特定於的自己的行為,及沿襲了父類的功能名稱,又根據子類的需要重新實現父類的方法,從而可以進行功能的擴充套件

public

class

phone

public

void

sendmessage()

public

void

show()

public

class

iphone12 extend phone

}public

class

test

}

重寫:方法的名稱一樣,引數列表一樣,返回值型別一樣,重寫的前提有繼承關係

過載:方法的名稱一樣,引數列表不一樣,返回值型別不做要求,在本類中

注意事項

子類方法重寫父類方法,必須要保證許可權要大於等於父類許可權

子類方法覆蓋父類方法,返回值型別,函式名稱和引數列表必須一模一樣

繼承後的特點----構造方法

先回憶構造方法的定義和作用

構造方法名字和類名保持一致,所以子類是無法繼承父類當中的構造方法

構造方法的作用一般是用來初始化成員變數,所以自類在初始化的過程中,必須先執行扶額李忠的初始化動作,子類的構造方法當中,預設有乙個super()方法,表示呼叫父類的無參構造方法,父類的成員變數初始化之後才可以給子類中使用

public

classfu}

public

class

zi extend fu

}public

class

test

}//fu()

//zi()

super和this

父類空間優先於子類物件產生

在每次建立子類物件的時候,先初始化父類空間,再建立子類物件,目的在於子類物件中包含了其對應的父類空間,便可以包含父類的成員,如果父類成員非私有,則子類可以隨意使用父類成員,體現在子類的構造方呼叫時,會先呼叫父類構造方法

物件導向三大特徵之一繼承

繼承 類似於現實世界中的子承父業,實現字段 屬性 方法 構造方法例外 的繼承,但私有的是無法訪問的,將類和類之間進行關聯,增加系統的耦合性,被繼承的類 父類或基類,繼承的類 子類或派生類。重用性 子類繼承父類的非私有的成員 例子 class people public string name pub...

c 物件導向的三大特徵之一繼承

繼承 封裝和多型是物件導向程式設計的重要特性。其成員被繼承的類叫基類也稱父類,繼承其成員的類叫派生類也稱子類。派生類隱式獲得基類的除建構函式和析構函式以外的所有成員。派生類只能有乙個直接基類,所以c 並不支援多重繼承,但乙個基類可以有多個直接派生類。繼承是可以傳遞的。即 如果 classb 派生出 ...

物件導向三大特徵 繼承

繼承 提高 的復用性 避免 重複 修改父類,影響所有的子類 增加了耦合性 如果乙個類沒有指定父類,預設父類是object,object類是所有類的父類 單繼承 乙個類只能有乙個父類 c 可以多繼承 可以多層繼承 1 編寫父類 public class person public void setna...