﻿<?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>C++博客-夜幻梦回-文章分类-设计模式面向对象</title><link>http://www.cppblog.com/Ylemzy/category/12066.html</link><description>足迹的足迹</description><language>zh-cn</language><lastBuildDate>Sun, 15 Aug 2010 04:44:22 GMT</lastBuildDate><pubDate>Sun, 15 Aug 2010 04:44:22 GMT</pubDate><ttl>60</ttl><item><title>接口与继承的比较以及类与类的关系</title><link>http://www.cppblog.com/Ylemzy/articles/98709.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Thu, 15 Oct 2009 10:57:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/98709.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/98709.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/98709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/98709.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/98709.html</trackback:ping><description><![CDATA[<span style="color: #0040ff;">继承会对父类的所有东西都继承下来。而接口比较灵活，能根据我们的选择，连接那些我们需要的类、方法。</span><br style="color: #0040ff;"><br style="color: #0040ff;"><span style="color: #0040ff;"><span style="color: #681300;">举例：</span><br><span style="color: #0040ff;">面对一些变形金刚，有的只能用轮胎行驶，有的只能飞，有的能潜水，有的能钻洞，有的能行驶也能飞等</span>如何能较好的</span><br style="color: #0040ff;"><span style="color: #0040ff;">根据对象去实现这些功能呢?</span><br style="color: #0040ff;"><br style="color: #0040ff;"><span style="color: #681300;">对于继承：</span><br style="color: #0040ff;"><br style="color: #0040ff;"><span style="color: #0040ff;">1.如果对所有的动作都集中在一个类中。如行驶为一个方法、飞为一个方法、潜水为一个方法&#8230;&#8230;。这样它的子类就拥有</span><br style="color: #0040ff;"><span style="color: #0040ff;">所有的方法，而针对某些子类x只能飞，那么其他的方法对它都是冗余的，增加了没用代码量。而且对那些类x的限制形容</span><br style="color: #0040ff;"><span style="color: #0040ff;">不够具体。</span><br style="color: #0040ff;"><span style="color: #0040ff;">2.既然如此，也许会想到让一个类只有一个方法，那么需要方法A就继承那个含有A的类。可是只有C++才能实现多继承。</span><br style="color: #0040ff;"><span style="color: #0040ff;">Java只能实现单继承，所以如果需要好几个方法就不行了？</span><br style="color: #0040ff;"><br style="color: #681300;"><span style="color: #681300;">继承的用处:</span><br style="color: #0040ff;"><span style="color: #0040ff;">对一个集合，能挑出它们的共同属性，且属性一般都是中性的，即没有正反面之分的。比如金刚都有眼睛，嘴巴，鼻子</span><br style="color: #0040ff;"><span style="color: #0040ff;">等（一般情况下）。那能不能对金刚都含有武器列入超类中呢。我认为还是不行，因为武器分好多类。</span><br style="color: #0040ff;"><br style="color: #0040ff;"><span style="color: #681300;">对于接口：</span><br style="color: #0040ff;"><span style="color: #0040ff;">1.我们可以对同类型的方法对上一个接口，把武器列入接口，而武器的特性跟接口无关，比如激光、子弹都只是在继承接口的</span><br style="color: #0040ff;"><span style="color: #0040ff;">类中决定。接口只负责让实现该接口的类与接口的继承类连接起来（关联）。</span><br style="color: #0040ff;"><span style="color: #0040ff;">2.接口让实现该接口的类不含冗余信息，能根据需要去连接接口中需要的某个方法。接口只承担连接关系，是两者的桥梁。</span><br style="color: #0040ff;"><span style="color: #0040ff;">具体连接的是什么方法，是在实例化的类中具体决定、实现。接口还承担传递命令的职责，即类中调用接口的方法是，接口将</span><br style="color: #0040ff;"><span style="color: #0040ff;">命令直接传到接口的某个具体方法，让那个方法自己执行。</span><br style="color: #0040ff;"><span style="color: #0040ff;">3.接口允许多继承，一个类可以继承多个接口。所以更体现接口的灵活性，例如：激光枪上还有散弹的枪，就让激光枪继承</span><br style="color: #0040ff;"><span style="color: #0040ff;">含有散弹枪的借口。</span><br style="color: #0040ff;"><br><span style="color: #681300;">其他类与类的关系：</span><br style="color: #0040ff;"><span style="color: #0040ff;">一个类包含其他类就叫关联。</span><br style="color: #0040ff;"><span style="color: #0040ff;">关联分为：组合和聚合。</span><br style="color: #0040ff;"><span style="color: #0040ff;">实例化一个类的同时，这个类也实例化了其他类。就该类与该类中的类，且同时存在，同时消亡，就是组合。</span><br style="color: #0040ff;"><span style="color: #0040ff;">而如果一个类对于另一个类可有可无，就是聚合了。</span><br style="color: #0040ff;"><br style="color: #0040ff;"><span style="color: #0040ff;">依赖：</span><br style="color: #0040ff;"><span style="color: #0040ff;">一个类中的方法的参数或是方法体内含有其他类，就是依赖。</span><br style="color: #0040ff;"><br style="color: #0040ff;"><br style="color: #0040ff;"><br style="color: #0040ff;"><br style="color: #0040ff;"> <img src ="http://www.cppblog.com/Ylemzy/aggbug/98709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2009-10-15 18:57 <a href="http://www.cppblog.com/Ylemzy/articles/98709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>