1、封裝ide
良好的封裝可以減小耦合;類內部的實現能夠自由地修改;類具備清晰的對外接口。好比創建一個貓的類,再創建一個狗的類,這樣也算封裝,只是會出現大量類似代碼。函數
2、繼承繼承的出現是由於對象類中出現過多重複代碼,爲解決該問題而創建父類,將這部分代碼放進父類中,由子類繼承。子類繼承父類的全部特性,同時能夠定義新的特性。this
若是子類繼承於父類,子類擁有父類非private的屬性和功能;子類具備本身的屬性和功能,即子類能夠擴展父類沒有的屬性和功能;子類還能夠以本身的方式實現父類的功能(方法重寫)。spa
class Animal //父類 { protected string name = ""; //字段,修飾符意味子類能夠繼承 public Animal(string name) //構造函數 { this.name = name; } protected int shoutNum = 3; //屬性及其設置方法 public int ShoutNum { get { return shoutNum; } set { shoutNum = value; } } public virtual string Shout() //父類方法,注意增長的虛擬修飾符表明該方法容許被子類重寫 { return ""; } }
class Cat : Animal //子類,繼承自父類 { public Cat(string name) : base(name) //繼承父類的構造函數,構造函數不能被繼承,只能被調用 { } public override string Shout() //重寫父類的方法 { string result = ""; for (int i = 0; i < shoutNum; i++) result += "喵 "; return "個人名字叫" + name + " " + result; } }
繼承的優勢:代碼共享,避免重複,可以使得修改或擴展繼承而來的實現都較爲容易;code
繼承的缺點:父類變子類變,繼承會破壞包裝,父類實現細節暴露給子類,顯然是一種類與類之間強耦合的關係。對象
總結:繼承適用狀況是兩個類具有‘is-a’的關係時,即徹底包含。blog
3、多態繼承
多態表示不一樣的對象能夠執行相同的動做,但要經過本身的實現代碼來執行,第二節中的父類和子類的重寫方法便是多態的表示。索引
virtual關鍵字可使用的範圍:屬性、事件、方法和索引器,可是字段不能虛擬。子類能夠選擇使用override關鍵字重寫父類的方法。接口
private void button1_Click(object sender, EventArgs e) //客戶端調用 { Animal cat ; //聲明時要聲明父類 cat = new Cat("小咪"); //實例要實例爲子類 cat.ShoutNum = 5; //執行子類重寫後的方法 MessageBox.Show(cat.Shout()); }
4、衍生:重構
重構都是在程序編寫過程當中發現大量重複代碼,於是對現有代碼進行從新編寫,提取重複部分融入或新建父類的。在父類中須要子類徹底繼承的方法不要添加virtual關鍵字,使其成爲普通方法,而須要子類自行定義的方法定義成虛方法。