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关键字,使其成为普通方法,而须要子类自行定义的方法定义成虚方法。

相关文章
相关标签/搜索