惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
B
Blog
博客园_首页
云风的 BLOG
云风的 BLOG
S
SegmentFault 最新的问题
罗磊的独立博客
Jina AI
Jina AI
C
Check Point Blog
Martin Fowler
Martin Fowler
J
Java Code Geeks
博客园 - 司徒正美
美团技术团队
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
有赞技术团队
有赞技术团队
U
Unit 42
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
小众软件
小众软件

博客园 - wzc998

Oracle Audit 关于"cannot perform a DDL, commit or rollback inside a query or DML" 错误 关于varchar2在pl/sql和schema级别的最大值 ORA-01031 权限不足错误的解决 通过代码备份存储过程,package body 和表数据 并还原 XSL ASP .net实现松耦合事件的三种方法 Log4net不同版本在app.config和web.config的配置区别 SQL*Loader FAQ 【转】NLS 视图的研究 oracle多语言环境下to_date时间转换问题 【转】如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程 【转】SQL SERVER 存储过程学习笔记 委托与接口的关系 IOC 【转】范式 【转】oracle范式与交叉表 oracle存储过程返回交叉表(使用存储过程/高级语言调用)
【转】代码复用原则:合理使用类组合和类继承
wzc998 · 2010-08-30 · via 博客园 - wzc998

继承和组合都可以达到代码复用的目的,但是组合比继承更具灵活性。
组合是通过引用已有类(一般为抽象类)或接口来实现复用的组合在运行时通过多态可以动态替换被组合的对象。
继承是通过以子类继承父类方式来使父类的非私有成员可以被其子类使用。继承在类编译时就确定了继承来的方法和

属性,无法在运行时动态改变从父类继承来的方法。如果继承得来的某个方法在子类中不适用,这时就需要重写该方

法。而这样又很有可能违反LSP设计原则。如果父类非私有成员发生了改变那么继承他的子类也不得不发生改变父类改

变。所以这种复用方式仅限于行为上的IS-A关系时才使用.

网络的例子:

t:如果你要用到一个类中的所有方法但还想多几个方法(你自己写)一起用,你有什么方法实现,
s:一般我会直接继承它,估计是答错了,能否继续把你的话说完。

t: 就单个实现来说没有正确错误之分  
   
  你如果是用继承来解决这个问题就是采用了高耦合的手段  
   
  也就是说子类B包含了超类A,子类B对超类A有强的依赖性  
继续:  
  当B对A的依赖性是稳定的,用继承不会有任何问题  
   
  但当B有变心,希望有一个长得象A,但是某些实现上与A有所不同的伙伴的话,由于是继承就不行了。也就是A与B都

要重新定义  
   
  如果我们最初就发现了B比较花心,那就不用继承,用聚合来完成  
  也就是B中包含A的实例变量,由B的构造函数传入A的实例  
   
  那只要写个A的子类A1  

  在实例B的时候传入不同的A就行