1.繼續面向對象程序員
面向對象的三大特徵:ide
封裝、繼承、多態函數
封裝:隱蔽代碼實現,代碼複用,修改方便。this
繼承:指針
多態:對象
2.什麼是類?什麼是對象?類和對象的區別?繼承
類是一種數據類型,用戶自定義的數據類型。 是針對具體存在的一種描述。內存
類的組成:字段,屬性,方法,構造函數。開發
對象是具體的。是類的具體實例。對象具備屬性和方法。 按照類的描述來建立一個可供咱們使用的實例。get
類只佔一塊內存,每一個對象單獨佔用一塊內存。 對象能夠叫作類的實例(Instance)
3.構造函數的做用?
主要是爲了方便程序員在實例化(new)對象的時候就爲對象裏的一些屬性字段初始化賦值。
<--構造函數-->
(1)訪問修飾符通常狀況下是public
(2)沒有返回值類型
(3)方法名和類名相同
(4)在該類被new的時候(實例化)調用
(5)用戶自定義的類中,若是沒有用戶定義的任何一個構造函數。那麼CLR將在程序運行的時候自動添加一個無參的構造函數給對象
也就是說:一旦用戶自定義的類中包含了一個或多個構造函數(無論有沒有參數的),那麼CLR將不在自動添加。
4.屬性
屬性的本質就是兩個方法,get和set。
屬性就是爲了設置訪問和修改爲員變量值的規則。
若是屬性裏只定義了get代碼塊,則該屬性叫作只讀屬性。
若是屬性裏只定義了set代碼塊。則該屬性叫作只寫屬性。
代碼:
public class Person
{
private string _name;
public string Name
{
get{return _name;}
set{_name=value;}
}
private int _age;//屬性存在的目的就是爲了設置訪問和修改爲員變量值的規則。
public int Age
{
get{return _age;}
set
{
if(value>=0&& value<=120)
{
_age=value;
}
else
{
_age=18;
}
}
}
}
5.GC垃圾回收器
垃圾回收器定時檢查堆內存,一旦發現沒有被引用的對象,就當即銷燬它。
6.靜態成員
CLR加載程序集裏的類信息,發現有靜態成員,則直接添加到[靜態成員表]中,整個程序集內均可以訪問這個表裏的靜態成員。
7.里氏替換原則
當存在繼承關係時,若是聲明的是父類,則堆中對象保存的類型指針爲父類,那麼調用的時候就會執行父類的成員。
若是調用的成員,父類中沒有,那麼程序會報錯。由於父類的類型指針只會去找父類的成員,找不到,沒有,就會報錯。
8.繼承
(1)、由於子類繼承了父類,因此子類對象可以調用父類對象裏全部的非私有成員。
(2)、當存在繼承關係的時候,子類的this同時能夠指向父類的非私有成員。base就存在於子類對象裏,用來指向父類的指針。
(3)、繼承的單根性:一個類只能繼承一個父類。
傳遞性:子類得到父類全部的非私有成員。
(4)、子類默認調用父類無參的構造函數
(5)、類的訪問修飾符默認就是internal,(程序集內共享,也就是項目內部共享)
類的成員變量,訪問修飾符默認是private
(6)、不能將父類對象強制轉換成子類對象
(7)、當建立一個子類對象的時候,若是聲明的是父類對象,那麼只能調用父類中的方法。
當建立一個子類對象的時候,若是聲明的是子類對象,那麼先看子類中的方法,有則調用,沒有則去父類中尋找,若是有則調用。
9.簡單工廠方法
最關鍵的是應用了里氏替換原則,及子類重寫父類的技術,它能讓代碼開發者不關心某個具體相關業務的實現,而只關心本身要實現的業務代碼的編號。
10.多態
多態就是用某個子類來實例化父類,調用父類的抽象方法或者虛方法,但實際上執行的是子類實例重寫的方法。