继承:层次化实现复杂类

通常,一个类如果过于复杂,首先应该考虑将其拆分为几个小类

但有些情况,一个类虽然复杂但是不能进行拆分,比如对框架类进行扩展,比如实现布局交互复杂的安卓Activity

这个时候可以考虑通过继承对复杂类进行层次化的开发


先说说扩展

对已有类进行扩展,有两种方式,一种是内部扩展,即内部增添代码,虽然可以将扩展封装,再在原来的类内部调用,但是毕竟引入了新对象,且可能在原有类中,这个对象将广泛分布,和原有对象夹杂,产生混乱。

另一种是外部扩展,即:1 实现新类,调用旧类;2 继承。外部扩展的好处是,扩展部分屏蔽了原来类的复杂性,只保留了原来类的接口,且不增加原来类的复杂性,是对原类进行扩展的理想方法。

现在说说继承和调用旧类的比较。一个重要的方面是接口的隐藏和暴露。调用旧类的方式是默认隐藏,而继承是默认暴露,而且继承类之间可以存在绿色通道(protected)。在这方面说不清谁好谁坏,但是在扩展框架类上,默认暴露却是极好的一点。因为框架类的一个要点就是维持框架接口。通过默认暴露的方式,不会带来坏处,同时可以让开发人员遗忘不需要的部分,专注扩展部分。

现在说说如果使用继承进行层次化开发。

不断继承的结果,是形成了一条链,他们在重载方法调用上存在从外到内的特点。因此,每一次继承可以看作是对原来的类加了一个层次,即,进行了扩展。将内聚的任务在新层次中实现,可以保证原类的简洁性,同时保持新类的简洁性。

在单继承中,虽然必须进行堆栈式扩展,但是每一次扩展必须理清是对哪一个层次进行的扩展,这样,依赖越低的扩展应该放在更低层,而依赖高的放在更高层。


写到这里,不经让我怀念起c++的多继承。都说多继承是个恶魔,可是在继承扩展方面,多继承可是块宝。不像单继承,你只能堆栈式地扩展,多继承可以让你的每一次扩展精准定位到你需要的层次,然后通过一次多继承选择自己需要的扩展部分。这需要良好的驾驭设计的能力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值