5.封装
每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。
封装有很多好处,第一、良好的封装能够减少耦合。第二、类内部的实现可以自由地修改。第三、类具有清晰的对外接口。
6.继承
对象的继承代表了一种is-a的关系,如果两个对象A和B,可以描述为B是A,则表明B可以继承A。继承者还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的个性。继承定义了类如何相互关联、共享特性。继承的工作方式是,定义父类和子类,或叫基类和派生类,其中子类继承父类的所有特性。子类不但继承了父亲的所有特性,还可以定义新的特性。
学习继承请记住三句话,如果子类继承于父类,第一、子类拥有父类非private的属性和功能;第二、子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;第三、子类还可以以自己的方式实现父类的功能(方法重写)。
protected 表示继承时子类可以对基类有完全的访问权,也就是说,用protected修饰的类成员,对子类公开,但不对其他类公开。
子类从它的父类中继承的成员有方法、域、属性、事件、索引指示器,但对于构造方法,有一些特殊,它不能被继承,只能被调用。对于调用父类的成员,可以用base关键字。
不用继承的话,如果要修改功能,就必须在所有重复的方法中修改,代码越多,出错的可能就越大,而继承的优点是,继承使得所有子类公共的部分都放在父类,使得代码得到了共享,这就避免了重复,另外,继承可使得修改或扩展继承而来的实现都较为容易。
继承是有缺点的,那就是父类变,则子类不得不变。继承会破坏包装,父类实现细节暴露给子类。继承显示是一种类与类之间强耦合的关系。
当两个类之间具备is-a的关系时,就可以考虑用继承了。
7.多态
面向对象的第三大特性--多态
多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
第一、子类以父类的身份出现。
第二、子类在工作时以自己的方式来实现。
第三、子类以父类的身份出现时,子类特有的属性和方法不可以使用。
为了是子类的实力完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。这是通过在该成员的返回类型之前添加virtual关键字来实现。
通常虚拟的是方法,字段是不能虚拟的,属性、事件和索引器都可以是虚拟的。
尽管方法可以是虚拟的,但虚方法还是有方法体,可以实际做些事情。然后,子类可以选择使用override关键字,将父类实现替换为它自己的实现,这就是方法重写Override,或者叫做方法覆写。
不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。
多态的原理是当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用。也就说,虚方法是按照其运行时类型而非编译时类型进行动态绑定调用的。
通过学习设计模式,可以加深对面向对象的理解。
8.重构
类的再封装和再抽象再继承。通过重构改善既有代码的设计。