首页 > 代码库 > 面向对象为什么要多用对象模式而少用继承模式?

面向对象为什么要多用对象模式而少用继承模式?

进来学习java的时候遇到了一些经验说多用对象模式,少用继承模式。现在写一点感想。

面向对象的对象之间的哦和方式有继承,实现,关联,依赖,聚合和组合。其中的继承和实现是继承这类模式。

说道的一个原因就是代码污染。例如一个父类非常复杂。而一个继承了这个类的子类可能重写了一部分的方法。但是继承了全部的方法。用户在使用继承的子类的时候可能会调用没有重写的父类的方法并且如果这种方法是在子类的设计者的意图之外的操作,那么子类在继承父类的时候,可以认为不光是继承到了有用的功能,还继承到了垃圾功能,父类的代码污染到了子类的代码。

如果采用组合的方法。子类不再继承父类,而采用关联或者聚合的方式进行耦合。这样会产生什么样的情况呢?我们首先假设原来的父类的设计是完善合理的。用户无论怎么访问父类,其结果都在父类的设计者的意料之内。现在,子类通过任意的方式使用父类的功能去完成一个新的功能,只要保证子类设计的合理,那么不会额外的需要子类的设计者去关心用户访问子类对象的父类的非重写的方法而产生意外。

总结一下,就是继承这种方式的耦合额外的引入了不需要的功能,因此,增加了子类设计者的关注点和风险。使用关联的方式实现耦合,只要保证父类设计合理,子类设计合理,就不会对子类的设计者提出额外的需要。


本文参考:

http://blog.csdn.net/hivon/article/details/583558