面向对象的三个基本特征——封装、继承、多态
时间:2011-05-18 来源:有愿望的石头
(1)封装
封装是面向对象的特征之一,是对象和类的概念的主要特性。封装,是将客观事物封装成抽象的类,并且类具有属性和行为,将具体的实现细节隐藏起来,客户类只需知道类所具有的接口及功能即可。
(2)继承
- 精心设计基类,基类应该比较稳定;
- 对于基类中不允许被覆盖的方法,在C#中应使用sealed来禁止子类覆盖
- 对于不是专门用于被继承的类,禁止其被继承
要实现继承,可以通过继承和组合两种途径来实现。
继承的实现主要有两种形式:实现继承和接口继承。
- 实现继承是指子类直接继承基类, 可以使用基类的属性和方法而无需额外编码。
- 接口继承是指仅适用属性和方法的名称,但是子类必须实现。
继承与组合的优缺点比较
组 合 关 系 |
继 承 关 系 |
优点:不破坏封装,整体类与局部类之间松耦合,彼此相对独立 |
缺点:破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性 |
优点:具有较好的可扩展性 |
缺点:支持扩展,但是往往以增加系统结构的复杂度为代价 |
优点:支持动态组合。在运行时,整体对象可以选择不同类型的局部对象 |
缺点:不支持动态继承。在运行时,子类无法选择不同的父类 |
优点:整体类可以对局部类进行包装,封装局部类的接口,提供新的接口 |
缺点:子类不能改变父类的接口 |
缺点:整体类不能自动获得和局部类同样的接口 |
优点:子类能自动继承父类的接口 |
缺点:创建整体类的对象时,需要创建所有局部类的对象 |
优点:创建子类的对象时,无须创建父类的对象 |
(3)多态(polumorphisn)
多态是具有表现多种形态的能力的特征,在OO中是指,语言具有根据对象的类型以不同方式处理之,特别是重载方法和继承类这种形式的能力。多态被认为是面向对象语言的必备特性。
这两者区别在哪?很显然,继承是子类使用父类的方法,而多态则是父类使用子类的方法。
其技术上的区别是绑定时期,晚期绑定一定是多态。