Home 面向对象的三大特征
Post
Cancel

面向对象的三大特征

类是面向对象编程三大主要特征的基础。 计算机中装了一个USB接口,这就是“封装”,而键盘、鼠标及摄像头都是USB接口的实现类,从广义上理解这就是一种“继承”,所以计算机的USB接口就能接驳各种各样的USB设备,这就是“多态”。

封装

  1. 封装是类和对象和概念的主要特性。
  2. 封装的意义:隐藏类内部实现细节暴露供外部类访问的接口,使代码模块化。
  3. 封装的例子:可乐,计算机主机,子弹……
  4. 类型把字段,属性和方法组合到一起。
  5. 访问修饰符隐藏类型的数据和行为的内部实现细节,使类的内部工作机制不暴露。(private)

封装要适度

  1. 如果把一些不相干的对象硬生生封装在一起,就会使代码变得莫名其妙,难于维护与管理,所谓“物极必反,过犹不及”,所以封装一定要适度。

继承

  1. 继承可以复用现有类的所有功能,并在无需重新编写基类类的情况下对这些功能进行扩展。
  2. 派生类型和基类型。
  3. 继承的例子:DNA遗传
  4. 类继承,接口继承

多态 polymorphisn

  1. 多态性意味着一个方法或类型可具有多种形式的实现。
  2. 接口也是实现多态的方式。

动态多态 - 覆盖 override

  1. 覆盖是指派生类重新定义基类的虚函数的做法。
  2. 覆盖允许将派生类类型的指针赋值给基类类型的指针。
  3. 函数的调用在编译期间无法确定,因为调用的子类的虚函数的地址无法给出,函数地址是在运行期绑定的(晚邦定
  4. 只有基类中被标记为 virtual 的实例方法和属性可以被重写;派生类使用 override 重写基类的方法,用 override 修饰的任何方法自动为虚。
  5. 把 Contact 转型成 PdaItem 类型后,内存中存储的依然是 Contact 类型,调用虚方法会调用派生的最远的(most derived)实现。
虚方法
1
2
3
4
5
6
7
8
9
10
11
12
public class PdaItem
{
    public virtual string Name { get; set; }
}
public class Contact : PdaItem
{
    public override string Name 
    {
        get {}
        set {}
    }
}

静态多态 - 重载 Overload (伪多态)

  1. 重载允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
  2. 重载在编译器就能够确定下来要调用的方法,编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数,是早绑定,编译期绑定。
  3. 方法的唯一性取决于方法名、参数数据类型或参数数量的差异。
  4. 方法重载是一种操作性多态(operational polymorphism)。如由于数据变化造成同一个逻辑操作具有许多(“多”)形式(“态”),就会发生“多态”。
实现重载的常用模式
  1. 在一个方法中实现核心逻辑,其他所有重载版本都调用那个方法。
  2. 将核心功能放到单一方法中供其他重载方法调用,以后就只需在核心方法中修改,其他方法将自动受益。
This post is licensed under CC BY 4.0 by the author.