【OOADP 学习笔记】之继承
2011-09-03 21:39
232 查看
在继承中重写方法时的一些准则:
在实现后重写父类的方法时不要改变其约定含义。任何人都可以假定子类和超类的工作方式一致。
继承会出现的潜在问题:
当一个子类只用父类的部分方法时,其余的父类方法是否可以别子类使用就成了一个值得思考的问题。
如果一个子类不允许使用一些父类中的方法,那我们如何禁止那些不允许别调用的方法从外面别调用?
Java中并不允许在重写是把控制标签写成private。来禁止对这些方法的访问。
对于这个问题,我们可以使用组合来构造新的类。 把上面父类作为一个新类的一个私有属性,这样几个以使用复用已有的方法,又可控制访问的接口。
继承与复合的比较
继承的一些优点:
自然,贴近现实世界
为多态提供有力支持。
但是继承也有一些问题:
很难做到很好,随着继承层次的加大复杂度和大量细节问题成指数级增加
在发现设计不足时很难改变,尤其是越顶层的类
程序员很难理解,对于很复杂的类继承体系
会带来不必要的负担(如上面),层次结构会泄露给客户代码
复合大的数情况下可以得到与继承相同的结果(对方法,属性的重用等),但有如下优点
容易开发,可根据需要裁减方法
容易改变
易于理解,他的复杂是随着复合类数量线性增加的
不会泄露给客户代码
总结:
不要过度使用继承。对于适当规模的程序尽量避免使用继承。继承的有效使用需要大量经验和努力
坚持is a原则
子类应是超类的扩展。在子类中,应确保之添加新的特征,不删除,禁用或改变超类的特性
在实现后重写父类的方法时不要改变其约定含义。任何人都可以假定子类和超类的工作方式一致。
继承会出现的潜在问题:
当一个子类只用父类的部分方法时,其余的父类方法是否可以别子类使用就成了一个值得思考的问题。
如果一个子类不允许使用一些父类中的方法,那我们如何禁止那些不允许别调用的方法从外面别调用?
Java中并不允许在重写是把控制标签写成private。来禁止对这些方法的访问。
对于这个问题,我们可以使用组合来构造新的类。 把上面父类作为一个新类的一个私有属性,这样几个以使用复用已有的方法,又可控制访问的接口。
继承与复合的比较
继承的一些优点:
自然,贴近现实世界
为多态提供有力支持。
但是继承也有一些问题:
很难做到很好,随着继承层次的加大复杂度和大量细节问题成指数级增加
在发现设计不足时很难改变,尤其是越顶层的类
程序员很难理解,对于很复杂的类继承体系
会带来不必要的负担(如上面),层次结构会泄露给客户代码
复合大的数情况下可以得到与继承相同的结果(对方法,属性的重用等),但有如下优点
容易开发,可根据需要裁减方法
容易改变
易于理解,他的复杂是随着复合类数量线性增加的
不会泄露给客户代码
总结:
不要过度使用继承。对于适当规模的程序尽量避免使用继承。继承的有效使用需要大量经验和努力
坚持is a原则
子类应是超类的扩展。在子类中,应确保之添加新的特征,不删除,禁用或改变超类的特性
相关文章推荐
- 学习笔记-观光篇(继承与多态)
- javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
- JAVA学习笔记之-继承
- java学习记录笔记--继承,super,Object类
- 【C++学习笔记】继承与派生基础概念
- 2016.06.15廖雪峰JS__学习笔记(class继承)__P10
- C++学习笔记19 多态与继承
- AS3.0基础学习笔记(6): 类继承
- JavaScript 学习笔记 - 对象和继承
- Java学习笔记_10_继承和多态
- C++中继承方式与访问标号的学习笔记
- 黑马程序员 — Objective-C学习笔记(二):继承
- java泛型编程学习 笔记三:泛型继承规则以及通配符“?”使用
- javascript 学习笔记(5)---继承
- PostgreSQL学习笔记3之表的继承和分区
- C++学习笔记 lesson12 继承
- 黑马程序员--IOS学习笔记(封装、继承、多态)
- 31天重构学习笔记21. 合并继承
- Kotlin 学习笔记(三) 类和继承
- [javase学习笔记]-9.2 单继承与多重继承