﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-zyuan1991</title><link>http://www.blogjava.net/zyuan1991/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 06 May 2026 23:37:12 GMT</lastBuildDate><pubDate>Wed, 06 May 2026 23:37:12 GMT</pubDate><ttl>60</ttl><item><title>组合与继承到底有什么区别？</title><link>http://www.blogjava.net/zyuan1991/archive/2016/12/27/432188.html</link><dc:creator>zyuan1991</dc:creator><author>zyuan1991</author><pubDate>Tue, 27 Dec 2016 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/zyuan1991/archive/2016/12/27/432188.html</guid><wfw:comment>http://www.blogjava.net/zyuan1991/comments/432188.html</wfw:comment><comments>http://www.blogjava.net/zyuan1991/archive/2016/12/27/432188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zyuan1991/comments/commentRss/432188.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zyuan1991/services/trackbacks/432188.html</trackback:ping><description><![CDATA[<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px">2016年12月27日14:45:26</div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px">=====================</div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">1、在新的class中使用既有的class，这中方法称之为"组合"。但是这种重用方式只是很单纯的重复运用以有的代码功能，而非重复运用其形式。</span><br style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: 24px; background-color: rgb(245,245,245)" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">2、让新的class成为既有class的一类，并且根据需要加入新的功能，而无须更动原有class，这种方法称之为"继承"。</span><br style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: 24px; background-color: rgb(245,245,245)" /><br style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: 24px; background-color: rgb(245,245,245)" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">如果B是A的一种&nbsp;才用继承</span></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)"><br /></span></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">PS：</span></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">继承是说&#8220;我父亲在家里给我帮了很大的忙&#8221;。&nbsp;</span><br style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: 24px; background-color: rgb(245,245,245)" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">组合是说&#8220;我请了个老头在我家里干活&#8221;。&nbsp;</span><br style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: 24px; background-color: rgb(245,245,245)" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">太有才了</span></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)"><br /></span></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2"><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">组合是在一类类中引用另一个类。生成另一个类的实例。&nbsp;</span><br style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: 24px; background-color: rgb(245,245,245)" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">而继承只是继承了父类的变量和方法。&nbsp;</span><br style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: 24px; background-color: rgb(245,245,245)" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">区别：&nbsp;</span><br style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: 24px; background-color: rgb(245,245,245)" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">使用组合可以用到另一个类中私有的变量和方法，而继承就不可以用到父类的私有的变量和方法了&nbsp;</span><br style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: 24px; background-color: rgb(245,245,245)" /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)">他们都有各自的好处，要灵活的运用。</span></font></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2"><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; color: rgb(51,51,51); widows: 1; line-height: normal; background-color: rgb(245,245,245)"><br /></span></font></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); outline-width: medium; font: 14px/21px 'Microsoft YaHei'; outline-style: none; letter-spacing: normal; outline-color: invert; text-indent: 0px; -webkit-text-stroke-width: 0px">
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><span style="line-height: normal"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">类继承与对象组合是实现类复用的两种最常用的技术。</font></span></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2"><span style="line-height: normal"></span></font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">一：继承</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">　　继承是Is a 的关系，比如说Student继承Person,则说明Student is a Person。继承的优点是子类可以重写父类的方法来方便地实现对父类的扩展。</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">　　继承的缺点有以下几点：</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">　　1：父类的内部细节对子类是可见的。</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">　　2：子类从父类继承的方法在编译时就确定下来了，所以无法在运行期间改变从父类继承的方法的行为。</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">　　3：子类与父类是一种高耦合，违背了面向对象思想。</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4 ：继承关系最大的弱点是打破了封装，子类能够访问父类的实现细节，子类与父类之间紧密耦合，子类缺乏独立性，从而影响了子类的可维护性。</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5：不支持动态继承。在运行时，子类无法选择不同的父类。<br /></font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">二：组合</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1：不破坏封装，整体类与局部类之间松耦合，彼此相对独立。</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2：具有较好的可扩展性。</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3：支持动态组合。在运行时，整体对象可以选择不同类型的局部对象。</font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2"><br /></font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">组合是has a的关系&nbsp;<br />继承是is a的关系<br /></font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2"><br /></font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">引用一句老话<span style="font-family: Simsun; border-collapse: separate; line-height: normal"><span style="font-family: Arial"><span style="border-collapse: separate">应该更能分清继承和组合的区别：组合可以被说成&#8220;我请了个老头在我家里干活&#8221; ，继承则是&#8220;我父亲在家里帮我干活"。</span></span></span><br /></font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2"><br /></font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">总结<br /></font></p>
<p style="font-family: Arial; outline-width: medium; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; widows: 1; margin: 0px; outline-color: invert; line-height: 26px; padding-right: 0px"><font style="outline-width: medium; outline-style: none; outline-color: invert; line-height: 1.5" size="2">1.除非考虑使用多态，否则优先使用组合。<br />2.要实现类似&#8221;多重继承&#8220;的设计的时候，使用组合。<br />3.要考虑多态又要考虑实现&#8220;多重继承&#8221;的时候，使用组合+接口。</font></p></div> <img src ="http://www.blogjava.net/zyuan1991/aggbug/432188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zyuan1991/" target="_blank">zyuan1991</a> 2016-12-27 15:27 <a href="http://www.blogjava.net/zyuan1991/archive/2016/12/27/432188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>