構造方法和析構方法
構造方法
類的構造方法
Woman類后面的“()”;其實指的就是構造方法。
只要你想要創建類或結構的實例,必須調用它的構
造方法。
構造方法負責對類里面的字段進行初始化。
1.構造方法必須類重名;
2.構造方法沒有返回值,但可以有參數;
3.構造方法可以有多個重載;
4.不帶參數的構造方法稱為默認構造;
1.構造方法的本質是一個構造器,是為了類的實例化而產生;
2.構造方法是一種特殊的方法,它沒有返回值,它必須與類重名,它只能在初始化的時候被系統自動執行,外部不能調用;
3.構造方法可以不顯示的寫,系統會默認的為你的類添加一個無參構造方法;
4.如果講構造函數設為private,則不能被外部實例化;
5.如果類里面有帶有參數的構造方法,想調默認構造時,必須把默認構造顯示的寫出來;
結構體的構造方法
public struct position{
????public int x;
????public int y;
//結構體的自定義構造
public position (int x , int y){
????this.x=x;
????this.y=y;
????}
}
默認構造方法不用寫默認構造顯示,也有默認構造。
析構方法
析構方法用于析構類的實例。
構造方法用戶實例化,分配內存空間,而析構方法正好與它相反,用于釋放內存空間。
一般在某個功能結束的時候,做某些事情。
class ?Car
{
????????????????????????~Car( )????????// destructor 寫在類名的前面
????????{
? ??????????????????????????// cleanup statements...
????????}
}
1.不能在結構中定義析構方法,只能對類使用析構方法。
2.一個類只能有一個析構方法。
3.無法繼承或重載析構方法。
4.無法調用析構方法。
5.它們是被自動調用的。
6.析構方法既沒有修飾符,也沒有參數。
面向對象
面向對象是把構成問題事務分解成各個對象,創建對象后用
對象調用各自方法以達到解決問題的目的;
面向對象特性:封裝、繼承、多態
OOP(面向對象編程)達到軟件工程的三個主要目標:
重用性、靈活性、擴展性
封裝
封裝是實現面向對象程序設計的第一步,封裝就是將數據或函數等集合在一個個的單元中(我們稱之為類)。
封裝的意義在于保護或者防止代碼(數據)被我們無意中破壞。
封裝就是對類成員的再次包裝,這樣寫更規范。
繼承
繼承用于創建可重用、擴展和修改在其他類中定義的行為的新類。 其成員被繼承的類稱為“基類”,繼承這些成員的類稱“派生類”。派生類只能有一個直接基類。 但是,繼承是可傳遞的。 如果 ClassB 派生出 ClassC,ClassA 派生出ClassB,則 ClassC 會繼承 ClassB 和 ClassA 中聲明的成員。
由繼承的關系我們知道,基類有的,派生類都有;
派生類有的,基類可能沒有。
即:派生類可以賦值給基類,而基類不能賦值給派生類。
指定基類的方法
通過在派生的類名后面追加冒號和基類名稱,可以指定基類。
1.派生類獲得基類的所有方法、字段、屬性和事件。
2.繼承具有傳遞性。
3.派生類可以賦值給基類,但是基類不能賦值給派生類。
多數情況 對象總是寫在子類里面,不會再基類里創建太多東西。
派生類寫構造需要把基類的內容也補充進去
例子:public classname(int a,int x,int y,long z): base ( x,y,z)//x,y,z是基類的內容。
this a=a;
里氏轉換
轉換原則一:子類對象可以直接賦值給父類對象。
作用:消除子類間的差異。把其類型轉換為統一的數據類型,這樣就可以寫出一套通用的代碼,這樣即可以最大限度的重用代碼,同時也提高了程序開發的效率;
轉換原則二:父類轉換成子類,這樣就可以調用子類里面的公有成員了。
is as關鍵字
?多態
當派生類從基類繼承時,它會獲得基類的所有方法、字段、 屬性和事件。 派生類可以選擇:
?? 繼承最接近的基類方法而不重寫它
?? 重寫基類中的虛擬成員。?
? 定義隱藏基類實現的成員的新非虛實現?
方法替換
當派生類繼承基類后,可以定義隱藏基類實現的成員的新非虛實現。通常,我們稱這為“方法替換”。
關鍵字:new
虛函數 重寫
相對比于方法替換
關鍵字 virtual修飾方法
override重寫子類里的方法
當采用虛方法重寫后,子類方法不會再含有父類方法的特征,如果需要調用原本父類的特征,就需要一個新的關鍵字
base?
用法:重寫時
pubic class A{
? ??????????public virtual void Aff{
? ??????????}
}
public class A:B
{
? ??????public override void Add(){
? ? ? ? ? ? ? ? base.Aff();
? ? ? ? ? ? ? ? //聲明附加的方法
? ??????}
}
重寫就是多態的表現形式