关于继承和接口的一个非常有趣的比喻
来源:互联网 发布:北京seo诊断服务 编辑:程序博客网 时间:2024/04/30 12:04
关于继承和接口的一个非常有趣的比喻
当使用继承的时候,主要是为了不必重新开发,并且在不必了解实现细节的情况下拥有了父类我所需要的特征。
但是很多时候,一个子类并不需要父类的所有特征,它可能只是需要其中的某些特征,但是由于通过继承,父类所有的特征都有了,需要的和不需要的特征同时具备了。而那些子类实际上不需要用到的,有时候甚至是极力避免使用的特征也可以随便使用,这就是继承的副作用。非凡是答应多重继承的OO语言中,很轻易引起不轻易发现的错误。所以在OO的语言中,会创造出各种规定来限制子类使用父类中的某些方法。
就拿你举的例子来说,假如狗的主人只是希望狗能爬比较低的树,但是不希望它尾巴可以倒挂在树上,像猴子那样可以飞檐走壁,以免主人管不住它。那么狗的主人肯定不会要一只猴子继承的狗。
设计模式更多的强调面向接口。猴子有两个接口,一个是爬树,一个是尾巴倒挂。我现在只需要我的狗爬树,但是不要它尾巴倒挂,那么我只要我的狗实现爬树的接口就行了。同时不会带来像继承猴子来带来的尾巴倒挂的副作用。这就是接口的好处。
OO技术发展也有好多年了,一个很明显的趋势就是继承的使用越来越少,而接口的使用越来越广泛了。其实只要稍微比较一下JDK里面那些最早就有的类库和最近才加进去的类库,就可以很明显的感觉到OO技术领域的编程风格的变迁,由大量的继承到几乎无处不用的面向接口编程。
呵呵,接口不是替代继承。比如说我现在就是要我的动物去爬树,我根本就不需要知道到底是狗去爬树还是猴子去爬树。我派一个“能爬树”的动物去爬。这个能爬树的动物既可以是猴子,也可以是狗。这样不是很灵活吗?
狗(爬树,咬人)
猴子(爬树,尾巴倒挂)
假如我只要满足爬树的要求,我根本就不管它是不是狗。
假如我既要爬树也要咬人,那么我当然可以选狗,也可以创建一个接口(爬树咬人),然后让狗实现(爬树咬人)接口。
因为我要的是实现我的软件的功能,只要实现了我需求的功能,我管它是不是狗呢?也许狗可以,也许狗不可以,也许狗今天可以,以后又不可以了。我都不管。我只要(爬树咬人)接口。
也许我原来一直用狗来完成我的爬树咬人接口,但是后来我发现另一种动物,比如猫吧,在爬树咬人这个功能上比狗更灵活,于是我就用猫替换了狗,而且代码一点都不需要修改。
1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。
2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。
- 关于继承和接口的一个非常有趣的比喻
- 关于继承和接口的一个非常有趣的比喻
- 关于MSOffice的又一个有趣的比喻
- 关于设计模式的几个有趣比喻
- 几个关于接口的比喻
- 关于面向对象中接口和抽象类的一个比喻
- 接口的理解(菜鸟借鉴)--很有趣的比喻
- 关于java继承与多态的一个有趣解答
- 关于||和&&的一个有趣问题
- 【SHELL】一个非常有趣的问题
- 【SHELL】一个非常有趣的问题
- 有关股票和经济的一个比喻
- 关于吞吐量和延迟的精彩比喻
- 测试的一个比喻!
- 23种模式的有趣比喻
- [技术讨论]关于针对接口编程的建筑模式比喻
- 接口回调传值的形象比喻
- 关于继承和接口的区别
- 20110426
- 出圈问题整理
- Modem工作原理
- 向上逐行滚动JS代码,鼠标划过暂停
- News words
- 关于继承和接口的一个非常有趣的比喻
- Windows Mobile 平台EDB 数据库的应用与开发
- Android的logcat命令详解
- 静态、动态、强命名、弱命名语言的区别
- Apache POI组件操作Excel,制作报表(一)
- 字符串函数
- 《走进搜索引擎》第二版就要发售了
- 数据库处理封装 GotDotNet.ApplicationBlocks.Data AdoHelper Dao 源码
- Apache POI组件操作Excel,制作报表(二)