1.繼承的概念
繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用已存在的類的功能。
為了提高軟件模塊的可復用性和可擴充性,以便提高軟件的開發效率,我們總是希望能夠利用前人或自己以前的開發成果,同時又希望在
自己的開發過程中能夠有足夠的靈活性,不拘泥於復用的模塊。C#這種完全面向對象的程序設計語言提供了兩個重要的特性--
繼承性inheritance 和多態性polymorphism。
繼承是面向對象程序設計的主要特征之一,它可以讓您重用代碼,可以節省程序設計的時間。繼承就是在類之間建立一種相交關系,使得
新定義的派生類的實例可以繼承已有的基類的特征和能力,而且可以加入新的特性或者是修改已有的特性建立起類的新層次。
現實世界中的許多實體之間不是相互孤立的,它們往往具有共同的特征也存在內在的差別。人們可以采用層次結構來描述這些實體之間的
相似之處和不同之處。
在C#中,如果一個類后面通過冒號又跟了另外一個類,那么我們就稱冒號前面的類
為子類,冒號后面的類為父類。這種書寫類的方式放映出來的關系就稱為類的繼承關系。
子類:派生類
父類:基類或者超類
4.滿足什么條件的類可以使用繼承??
解析:滿足is a關系的兩個類可以使用繼承。
案例:經理is a a 員工
程序員 is a 員工
學生 is a Person
5.如果new一個子類對象,那么有如下執行流程
01.先定位到子類對應構造函數,沒有執行子類的方法體
02.轉向了父類的無參構造函數,執行父類構造方法體
03.轉向了子類的方法體繼續執行。
點題的話:如果在子類構造中,沒有使用base顯示調用父類的構造,那么系統也會自動調用父類的無參構造
01.base代表父類對象,如果base():調用父類的構造函數
02.base代表的是方法調用,是不需要參數類型的
6.通過base調用父類構造函數注意點
解析:01.通過base調用父類構造函數只能書寫在子類的構造后
02.通過base調用父類構造函數參數順序和父類的構造參數一致
7.注意:方式一:new Student("張靚穎",20);
和方式二:new Student
{
Name="張靚穎",Age=20
}區別?
解析:最終都能實現對類中的屬性賦值。
但是賦值的原理不同,
方式一:直接調用該類的帶參構造賦值。
01.先通過無參構造創建出類的對象
02.對象名.屬性名的方式賦值
8.訪問修飾符
public:在任何位置都可以訪問,甚至是跨程序集都可以訪問。
private:只能當前類的花括號中訪問。
protected:只能在當前類,當前類的子類,子類的子類(孫子類)中可以訪問。
7.注意:方式一:new Student("張靚穎",20);
和方式二:new Student
{
Name="張靚穎",Age=20
}區別?
解析:最終都能實現對類中的屬性賦值。
但是賦值的原理不同,
方式一:直接調用該類的帶參構造賦值。
01.先通過無參構造創建出類的對象
02.對象名.屬性名的方式賦值
8.訪問修飾符
public:在任何位置都可以訪問,甚至是跨程序集都可以訪問。
private:只能當前類的花括號中訪問。
protected:只能在當前類,當前類的子類,子類的子類(孫子類)中可以訪問。
9.繼承的傳遞性
如果一個類B繼承自類A,而類C又繼承類B,那么類C也可以訪問到類A中非私有成員
10.繼承的單根性 (C#不支持多繼承 Java也不支持多繼承)
在很久很久以前,有一個叫C++的家伙,他是支持多繼承的語言,突然有一天,10個程序員用多繼承,有9個都用錯了,后續的Java和C#語言因此不再支持多繼承。
在C#中,一個類只能有一個父類,C#和Java都不支持多繼承。要想使用多繼承,那么請您使用接口。。
11.遍歷窗體上所有的控件,判斷是不是文本框
foreach(Control c in this.Controls)
{
if(c is TextBox)
{
((TextBox)c).Text="";
}
}
is a 判斷一個對象是否是某個類型。
12.繼承的價值
01.模擬現實世界的關系
02.便於重用和擴展已徹底測試的代碼,且無需修改
03.結構更清晰
13.多態
不同的對象對於同一個操作,做出的響應不同,那么這種情況在面向對象編程中就稱為多態
使用多態的目的?
解析:使用多態就是為了統一調用
14.實現多態三種方式:
方式一:通過虛方法實現多態
實現多態的步驟
01.在父類中通過virtual關鍵字定義一個虛方法
02.在子類中通過override關鍵字對父類中的虛方法進行重寫
03.調用的時候,調用的是子類的方法
目前為止,我們學了兩種:
第一種:虛方法實現多態
通過在普通類Person中用Virtual關鍵字定義虛方法SayHello(),然后在子類Student中通過override關鍵字對父類的SayHello()方法進行重寫。
如下:
Student類
Teacher類
在Main方法中調用