2、面向對象設計三大特性-----《大話設計模式》

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關鍵字,使其成爲普通方法,而須要子類自行定義的方法定義成虛方法。

相關文章
相關標籤/搜索