概述
多個類中存在相同的屬性和行為時,我們可以將這些內容抽取到單獨的乙個類中,那麼多個類就無需在定義這些屬性和行為,只要去繼承這個單獨的類即可。
其中,多個類稱為子類或者派生類,單獨的那乙個類稱為父類,超類,基類
繼承描述的是事物之間的所屬關係,這種關係是: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...