面向对象的三个基本特征——封装、继承、多态

时间:2021-10-26 21:56:45

(1)封装

封装是面向对象的特征之一,是对象和类的概念的主要特性。封装,是将客观事物封装成抽象的类,并且类具有属性和行为,将具体的实现细节隐藏起来,客户类只需知道类所具有的接口及功能即可。

(2)继承

继承是指一个对象直接使用另一对象的属性和方法。注意这里的继承,主要是指行为和属性的一致性,而区别于“特殊”的概念,如矩形是特殊的四边形,正边形是特殊的矩形。而在我们程序中,一般不会将正边形的类直接继承于矩形,因为二者之间的行为和属性还是有较大的差别的。
继承可以使子类继承父类的属性和行为,减少了子类的代码。但同时,父类与子类紧密耦合,子类丧失了独立性,任何对父类的改变,都将影响到所有的子类。所以,在很多情况下,推荐使用聚合,而不是继承。但在某些情况下,对于某些具有较明显的继承关系上的对象而言,创建合理的父子类层次结构可以较明显的增加程序的可读性和可维护性。在使用继承时,应遵循如下要求:
  •  精心设计基类,基类应该比较稳定;
  •  对于基类中不允许被覆盖的方法,在C#中应使用sealed来禁止子类覆盖
  •  对于不是专门用于被继承的类,禁止其被继承

要实现继承,可以通过继承和组合两种途径来实现。

继承的实现主要有两种形式:实现继承和接口继承。

  • 实现继承是指子类直接继承基类, 可以使用基类的属性和方法而无需额外编码。
  • 接口继承是指仅适用属性和方法的名称,但是子类必须实现。

 

继承与组合的优缺点比较

 

组 合 关 系

继 承 关 系

优点:不破坏封装,整体类与局部类之间松耦合,彼此相对独立

缺点:破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性

优点:具有较好的可扩展性

缺点:支持扩展,但是往往以增加系统结构的复杂度为代价

优点:支持动态组合。在运行时,整体对象可以选择不同类型的局部对象

缺点:不支持动态继承。在运行时,子类无法选择不同的父类

优点:整体类可以对局部类进行包装,封装局部类的接口,提供新的接口

缺点:子类不能改变父类的接口

缺点:整体类不能自动获得和局部类同样的接口

优点:子类能自动继承父类的接口

缺点:创建整体类的对象时,需要创建所有局部类的对象

优点:创建子类的对象时,无须创建父类的对象

 

 (3)多态(polumorphisn)

多态是具有表现多种形态的能力的特征,在OO中是指,语言具有根据对象的类型以不同方式处理之,特别是重载方法和继承类这种形式的能力。多态被认为是面向对象语言的必备特性。

这两者区别在哪?很显然,继承是子类使用父类的方法,而多态则是父类使用子类的方法。

其技术上的区别是绑定时期,晚期绑定一定是多态。