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