- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java编程继承的第一原则
广州疯狂软件学院ios培训课程由资深研究ios开发教师授课,疯狂软件年终钜惠,报名ios就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询。
对于【继承】的第一印象就是获得了父的所有方法和属性,所以相对于继承了父的功能和职责。而后面自己的设计也是基于这个原则,就是复用原则,复用父项的方法原则。慢慢的延伸就是有多个子类,就会把几个子类共用的一些方法放到父类里面,而这种设计思想深深的影响了自己很久。
而这种方法却在近年来被自己慢慢的推翻,现在使用继承的第一原则就是模板,Template。通过父类使用Template模式,构造出子类的流程,而自己只是在对应的钩子方法(Hook)里面填充着差异的地方,如果不是这种情况,我会尽量的减少继承的使用。对于原来的把子类的方法推到父类的方法里面,则通过其它的方式进行消除掉了。造成这种变化,只是源于一个原则的影响,【一切私有方法都是有罪的】。
在编码的时候,大量的把方法推到父类之后,才发现这些方法,别的地方也会需要,而这个时候,就很痛苦,因为通过继承肯定不行,但是不继承,别的地方就需要copy一份,不copy就需要把这个方法变成静态的方法,而这个时候,就会出现很奇怪的关系了。这种问题,我一般都是把这些方法归属到几个其它类中,因为调用super.method(),和调用Other.method()实际上代码是一样的,都没有减少和增加,但是类的职责却清晰了很多。
近些年随着IOC的增多,那么Template的使用也自然增多了很多,所以也自然的倾向于父类定义流程,子类实现差异的方式来做,而不是父类提供方法,子类进行组装。两种差异的直观比较,见下面的代码。
第一种方式:父类提供大量方法,子类组装
1 public class FatherMehod {
2
3 protected void a() {
4 // doSomeThing
5 }
6
7 protected void b() {
8 // doSomeThing
9 }
10
11 protected void c() {
12 // doSomeThing
13 }
14
15 }
1 public class SonSetup extends FatherMehod {
2 public void doProcess() {
3 a();
4 b();
5 c();
6 }
7 }
第二种方法:父类提供流程,子类实现差异(Template)
1 public abstract class FatherTemplate {
2 public void doProcess() {
3 a();
4 b();
5 c();
6 }
7
8 protected abstract void a();
9 protected abstract void b();
10 protected abstract void c();
11 }
1 public class SonDiff extends FatherTemplate{
2
3 protected void a() {
4 // doSomeThing
5 }
6
7 protected void b() {
8 // doSomeThing
9 }
10
11 protected void c() {
12 // doSomeThing
13 }
14
15 }
差异就在于在第一种方式里面子类实现的代码,变成父类实现了,实现了控制反转(IOC),这个就是我的继承的第一原则,Template。
疯狂软件java培训、ios培训新年钜惠,报名Java就业班免费赠送java基础班,报名iOS就业班免费赠送iOS基础班,本月火速抢座中,为回报广大新老学员,值此新年之际推出报读就业班赠送基础班的活动。(疯狂软件学院咨询QQ:544627560电话:020QQ:707552864疯狂软件官网fkjava)
-----------------------------------2014年初活动--------------------------------------
疯狂软件Java学习班方向:
1.报读JavaEE就业班赠送基础班课程。
2.开班一次性(一个月内)交清JavaEE就业班学费,赠送基础班全套课程。
疯狂软件iOS学习班方向:
1.报读
文档评论(0)