【OOADP 学习笔记】之继承

在继承中重写方法时的一些准则:

在实现后重写父类的方法时不要改变其约定含义。任何人都可以假定子类和超类的工作方式一致。


继承会出现的潜在问题:

当一个子类只用父类的部分方法时,其余的父类方法是否可以别子类使用就成了一个值得思考的问题。

如果一个子类不允许使用一些父类中的方法,那我们如何禁止那些不允许别调用的方法从外面别调用?

Java中并不允许在重写是把控制标签写成private。来禁止对这些方法的访问。

对于这个问题,我们可以使用组合来构造新的类。 把上面父类作为一个新类的一个私有属性,这样几个以使用复用已有的方法,又可控制访问的接口。


继承与复合的比较

继承的一些优点:

  • 自然,贴近现实世界
  • 为多态提供有力支持。

但是继承也有一些问题:

  • 很难做到很好,随着继承层次的加大复杂度和大量细节问题成指数级增加
  • 在发现设计不足时很难改变,尤其是越顶层的类
  • 程序员很难理解,对于很复杂的类继承体系
  • 会带来不必要的负担(如上面),层次结构会泄露给客户代码

复合大的数情况下可以得到与继承相同的结果(对方法,属性的重用等),但有如下优点

  • 容易开发,可根据需要裁减方法
  • 容易改变
  • 易于理解,他的复杂是随着复合类数量线性增加的
  • 不会泄露给客户代码

总结:

  • 不要过度使用继承。对于适当规模的程序尽量避免使用继承。继承的有效使用需要大量经验和努力
  • 坚持is a原则
  • 子类应是超类的扩展。在子类中,应确保之添加新的特征,不删除,禁用或改变超类的特性


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值