组合与继承

来源:互联网 发布:apache jakarta是什么 编辑:程序博客网 时间:2024/04/19 13:52
组合与继承

       组合,有的书里面也叫聚合。由现有的类生成新的类,有两种方法就是组合与继承。我们把UML中的关联关系和聚集关系统称为组合关系。组合与继承都是提高代码可重用性的手段。在设计对象模型时,可以按照语义来识别类之间的组合关系和继承关系。在有些情况下,采用组合关系或者继承关系能完成同样的任务,组合和继承存在着对应关系:组合中的整体类和继承中的子类对应,组合中的局部类和继承中的父类对应。

       组合是将现有的类型作为新类底层实现的一部分来加以复用通常就是一个类里用另一类当他的数据成员。与继承有什么区别?起初我都觉得区别这两个概念比较幼稚,想当然这两者是泾渭分明,不存在象抽象与接口之间如此难分清红皂白,纠葛不清。组合是象是说“我请了个老头在我家里干活”,只讲究没有情感的has 。继承是说“我父亲在家里给我帮了很大的忙”是对一个类的兼收并蓄。 组合一般是将现有的类型作为新类型底层实现的一部分来加以复用,在一个类中引用另一个类。而继承是拥有了父类的非私有方法。其中“is-a (是一个)”的关系是用继承来表达的,而“has-a(有一个)”的关系则是用组合来表达的。但后来想想如果让一个JAVA程序员辩认是组合,还是继承,当然没有太多的意义,问题是在抽象问题的阶段,你自己如何去准确把握什么时候用组合,什么时候用继承。

       组合关系和继承关系相比,前者的最主要优势是不会破坏封装,在软件开发阶段,组合关系虽然不会比继承关系减少编码量,但是到了软件维护阶段,由于组合关系使系统具有较好的松耦合性,因此使得系统更加容易维护。组合关系的缺点是比继承关系要创建更多的对象。从软件构架来说,组合,耦合度比继承弱,继承是对父类方法和数据成员的兼收并蓄,而组合,可以有选择得使用某一种方法。

       只有明确维持着“是一个”关系时,才使用继承,否则组合才是最好的选择。为判断自己到底应该选用组合还是继承,一个最简单的办法就是考虑是否需要从新类上溯造型回基础类。若必须上溯,就需要继承。但如果不需要上溯造型,就应提醒自己防止继承的滥用。但只要记住经常问自己“我真的需要上溯造型吗”,对于组合还是继承的选择就不应该是个太大的问题。组合这种重用方式只是很单纯的重复运用以有的代码功能,而非重复运用其形式。继承让新的class成为既有class的一类,并且根据需要加入新的功能,而无须更动原有class。从设计模式上看来!java只支持单继承。如果你想同时继承两个类是绝对做不到的。另外。如果继承泛滥。或让一个class里面的内容变得非常的臃肿。有的方法其实并不是我们需要关注的方法。他也会继承下来! 如果用组合就不一样了。能把已有的两个类,引用进来,可以使用我们自己比较感兴趣的方法!所以说能用组合尽量用组合。打个比方,Vehicle类是所有车辆的类,它至少具有可被驾驶的功能;而Car是所有小娇车的类,它具有了载人的功能,它必须回溯,因为它必须具有被驾驶的功能。而Car上的方向盘与刹车,与Car之间只是简单地使用了它们具有的功能,是整体与部分的关系。所以是组合使用的。

原创粉丝点击