﻿<?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-java 友人帮-文章分类-类的设计</title><link>http://www.blogjava.net/jzone/category/40758.html</link><description>java web, java wap</description><language>zh-cn</language><lastBuildDate>Sun, 12 Jul 2009 18:53:44 GMT</lastBuildDate><pubDate>Sun, 12 Jul 2009 18:53:44 GMT</pubDate><ttl>60</ttl><item><title>类之间关系的层次</title><link>http://www.blogjava.net/jzone/articles/286490.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 12 Jul 2009 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/286490.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/286490.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/286490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/286490.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/286490.html</trackback:ping><description><![CDATA[<p><strong style="font-family: Comic Sans MS">1</strong>.首先类之间的关系从宏观上可以分为：关联、依赖、继承，而其中关联又有两种特例：聚合和组合，不过在UML2.X中聚合和组合合成一种关系了。 <br />
<br />
<strong style="font-family: Comic Sans MS">2</strong>.从使用的频率来看，关联（包括聚合和组合）关系是使用最为广泛的；其次是依赖和继承 <br />
<br />
<strong style="font-family: Comic Sans MS">3</strong>.关联和依赖的区别： <br />
A:从类之间关系的强弱程度来分，关联表示类之间的很强的关系；依赖表示类之间的较弱的关系； <br />
<br />
B:从类之间关系的时间角度来分，关联表示类之间的&#8220;持久&#8221;关系，这种关系一般表示一种重要的业务之间的关系，需要保存的，或者说需要&#8220;持久化&#8221;的，或者说需要保存到数据库中的。比如学生管理系统中的Student类和Class（班级）类，一个Student对象属于哪个Class是一个重要的业务关系，如果这种关系不保存，系统就无法管理。另外，依赖表示类之间的是一种&#8220;临时、短暂&#8221;关系，这种关系是不需要保存的，比如Student类和StuEditScreen（学生登录界面）类之间就是一种依赖关系，StuEditScreen类依赖Student类，依赖Student对象的信息来显示编辑学生信息。 <br />
<br />
C:设计类之间的关系是遵循的原则：首先判断类之间是否是一种&#8220;关联&#8221;关系，若不是再判断是否是&#8220;依赖关系&#8221;，一般情况下若不是关联，就是依赖关系 <br />
<br />
D:依赖一般情况下是以下几种情况之一：a、ClassA中某个方法的参数类型是ClassB；这种情况成为耦合；b、ClassA中某个方法的参数类型是ClassB的一个属性；这种情况成为紧耦合；c、ClassA中某个方法的实现实例化ClassB；d、ClassA中某个方法的返回值的类型是ClassB；如果出现了上述四种情况之一，两个类很有可能就是&#8220;依赖&#8221;关系。 <br />
<br />
E:依赖关系（Dependency）：是类与类之间的连接，依赖总是单向的。依赖关系代表一个类依赖于另一个类的定义。下面的例子中class A 依赖与class B、C、D。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_15_105_Open_Image" onclick="this.style.display='none'; Codehighlighter1_15_105_Open_Text.style.display='none'; Codehighlighter1_15_105_Closed_Image.style.display='inline'; Codehighlighter1_15_105_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_15_105_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_15_105_Closed_Text.style.display='none'; Codehighlighter1_15_105_Open_Image.style.display='inline'; Codehighlighter1_15_105_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;A</span><span id="Codehighlighter1_15_105_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_15_105_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_45_99_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_99_Open_Text.style.display='none'; Codehighlighter1_45_99_Closed_Image.style.display='inline'; Codehighlighter1_45_99_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_45_99_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_45_99_Closed_Text.style.display='none'; Codehighlighter1_45_99_Open_Image.style.display='inline'; Codehighlighter1_45_99_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;B&nbsp;getB(C&nbsp;c,&nbsp;D&nbsp;d)</span><span id="Codehighlighter1_45_99_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_45_99_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;E();&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;B(c,&nbsp;d,&nbsp;e);&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span></div>
<p><br />
F:关联是一种结构关系，说明一个事物的对象与另一个事物的对象相联系。给定一个连接两各类的关联，可以从一个类的对象导航到另一个类的对象。<br />
关联可以有方向，即导航。一般不作说明的时候，导航是双向的，不需要在线上标出箭头。大部分情况下导航是单向的，可以加一个箭头表示。关联在代码中一般表示为属性（成员变量），例如下面例子中 class A与B关联<br />
&nbsp;<br />
public class A{&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; private B b;&nbsp;&nbsp; <br />
}&nbsp;&nbsp; <br />
如果B也关联到A，那么它们就是双向的关联。<br />
public class B{&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; private A a;&nbsp;&nbsp; <br />
}&nbsp; </p>
<p><br />
G:聚合关系(Aggregation)：是关联关系的一种，是强的关联关系。聚合是整体与个体之间的关系。如汽车类与引挚类，轮胎类之间的关系就是整体与个体的关系。 <br />
与关联关系一样，聚合关系也是通过实例变量来实现的。</p>
<p>***关联关系所涉及的两个类是处于同一层次上的，而在聚合关系中，两个类处在不平等的层次上的，一个代表整体，一个代表部分。（关联与聚合仅仅从语法上是区分不开的，需要察所涉及的类之间的逻辑关系。）<br />
<br />
</p>
<p>H:组成关系(Composition)：是关联关系的一种，是比聚合关系强的关系。它要求普通的聚合关系中代表的对象负责代表部分的对象的生命周期，合成关系是不能共享的。 <br />
代表整体的对象需要负责保持对象的存活，在一些情况下负责将代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象，由后者负责此对象的生命周期。换言之，</p>
<p>*******代表部分的对象在每一个时刻只能与一个对象发生合成关系，由后者排它的负责其生命周期。<br />
</p>
<img src ="http://www.blogjava.net/jzone/aggbug/286490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-07-12 23:13 <a href="http://www.blogjava.net/jzone/articles/286490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类与类之间唯妙的关系</title><link>http://www.blogjava.net/jzone/articles/286489.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 12 Jul 2009 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/286489.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/286489.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/286489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/286489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/286489.html</trackback:ping><description><![CDATA[<p>做java也有段时日了，但是总觉得自己还很虚，好多不会，即使会的也不能全懂，自己内心感觉到恐慌。<br />
<br />
既然是程序设计，那谈到设计了，就不能离开类，因为java中一切的设计都是以类为基础的。<br />
<br />
从javaeye上找个篇文章，根据自己的理解做了点手术，请作者不要见怪。<br />
<br />
类与类之间存在以下关系： </p>
<p>1、 泛化(Generalization)</p>
<p>很简单，就是我们常说的继承。是说子类获得父类的功能的同时，还可以扩展自己的功能。 如图:<br />
&nbsp;&nbsp;<img height="178" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/200907/Generalization.jpg" width="134" border="0" /></p>
<p><strong>Java代码中表现为：extends 和 implements</strong> </p>
<p>2、 依赖(Dependency)</p>
<p>两个相对独立的咚咚(A和B)，当A负责构造B时，A与B形成依赖关系，即A使用B。如图： </p>
<p>&nbsp;<img height="82" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/200907/Dependency.jpg" width="377" border="0" /></p>
<p>&lt;v:shape id="_x0000_i1026" style="WIDTH: 378pt; HEIGHT: 81.75pt" type="#_x0000_t75"&gt;&lt;v:imagedata o:title="Dependency" src="<a href='file:///D:\DOCUME~1\Yaogao\LOCALS~1\Temp\msohtml1\01\clip_image003.wmz"></v:imagedata></v:shape' href_cetemp='file:///D:\DOCUME~1\Yaogao\LOCALS~1\Temp\msohtml1\01\clip_image003.wmz"></v:imagedata></v:shape'>file:///D:\DOCUME~1\Yaogao\LOCALS~1\Temp\msohtml1\01\clip_image003.wmz"&gt;&lt;/v:imagedata&gt;&lt;/v:shape</a>&gt; </p>
<p><strong>Java代码中：表现为局部变量，方法的参数，以及对静态方法的调用</strong> </p>
<p>3、 关联(Association )</p>
<p>&nbsp;&nbsp; 两个相对独立的咚咚(A和B)，当A对象持有B对象的时候，形成关联关系。 </p>
<p>关于分为有两种特殊的形式，聚合（Aggregation）和组合（Composition），聚合和组合只有概念上的区别，在Java中的代码实现上没有区别。 </p>
<p>聚合：指的是整体与部分的关系，如图： </p>
<p>&nbsp;<img height="198" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/200907/Aggregation.jpg" width="402" border="0" /></p>
<p>组合：表示类之间整体和部分的关系，但是组合关系中部分和整体具有统一的生存期,即整体对象不存在，部分对象也将不存在，如图： </p>
<p>&nbsp;<img height="182" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/200907/Composition.jpg" width="392" border="0" /></p>
<p><strong>Java代码中：表现为成员变量。</strong> </p>
<p>4、 总结</p>
<p>在Java中，应该尽量优先使用组合，而不是继承，因为继承会使得类关系过于复杂化，破坏了封装性，使用组合一样可以获得已有类的功能，而且会使新类更加稳固。 </p>
<p>实际上，从依赖 -----〉聚合--------〉组合，类与类之间的关系更加紧密，互相之间的影响越来越大，其实我们平常比较少去区分这些关系，而且事实上这东西的定义不太好理解，所以肯定会导致认识上的偏差，所以我们使用这些东西的时候，尽量靠近大家都认同的做法，这样容易让别人理解。 </p>
<img src ="http://www.blogjava.net/jzone/aggbug/286489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-07-12 22:50 <a href="http://www.blogjava.net/jzone/articles/286489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于泛型</title><link>http://www.blogjava.net/jzone/articles/286442.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 12 Jul 2009 04:13:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/286442.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/286442.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/286442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/286442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/286442.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.ArrayList;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.List;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_63_220_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_220_Open_Text.style.display='none'; Codehighlighter1_63_220_Closed_Image.style.display='inline'; Codehighlighter1_63_220_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_63_220_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_63_220_Closed_Text.style.display='none'; Codehighlighter1_63_220_Open_Image.style.display='inline'; Codehighlighter1_63_220_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> Fan </span>
				<span id="Codehighlighter1_63_220_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_63_220_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> String name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_128_160_Open_Image" onclick="this.style.display='none'; Codehighlighter1_128_160_Open_Text.style.display='none'; Codehighlighter1_128_160_Closed_Image.style.display='inline'; Codehighlighter1_128_160_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_128_160_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_128_160_Closed_Text.style.display='none'; Codehighlighter1_128_160_Open_Image.style.display='inline'; Codehighlighter1_128_160_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> setName(String name) </span>
						<span id="Codehighlighter1_128_160_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_128_160_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.name </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_191_218_Open_Image" onclick="this.style.display='none'; Codehighlighter1_191_218_Open_Text.style.display='none'; Codehighlighter1_191_218_Closed_Image.style.display='inline'; Codehighlighter1_191_218_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_191_218_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_191_218_Closed_Text.style.display='none'; Codehighlighter1_191_218_Open_Image.style.display='inline'; Codehighlighter1_191_218_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> String getName() </span>
						<span id="Codehighlighter1_191_218_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_191_218_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_244_922_Open_Image" onclick="this.style.display='none'; Codehighlighter1_244_922_Open_Text.style.display='none'; Codehighlighter1_244_922_Closed_Image.style.display='inline'; Codehighlighter1_244_922_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_244_922_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_244_922_Closed_Text.style.display='none'; Codehighlighter1_244_922_Open_Image.style.display='inline'; Codehighlighter1_244_922_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> FanTest </span>
				<span id="Codehighlighter1_244_922_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_244_922_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_289_920_Open_Image" onclick="this.style.display='none'; Codehighlighter1_289_920_Open_Text.style.display='none'; Codehighlighter1_289_920_Closed_Image.style.display='inline'; Codehighlighter1_289_920_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_289_920_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_289_920_Closed_Text.style.display='none'; Codehighlighter1_289_920_Open_Image.style.display='inline'; Codehighlighter1_289_920_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args) </span>
						<span id="Codehighlighter1_289_920_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_289_920_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> /用泛型的效果--list的get方法取出来的对象不需要强制转换</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        Fan fan1 </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Fan();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        fan1.setName(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">fanTest1</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Fan fan2 </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Fan();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        fan2.setName(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">fanTest2</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        List</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">Fan</span>
								<span style="COLOR: #000000">&gt;</span>
								<span style="COLOR: #000000"> list </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> ArrayList();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        list.add(fan1);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        list.add(fan2);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(list.get(</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">).getName());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(list.get(</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">).getName());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> /不用泛型的效果--list的get方法取出来的对象需要强制转换</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        List no_list </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> ArrayList();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        no_list.add(fan1);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        no_list.add(fan2);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(((Fan) list.get(</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">)).getName());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(((Fan) list.get(</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">)).getName());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>首先给一个我在CSDN里查到的我们常用的例子，这个基本上天天都会用，但是从来没仔细的考虑过中间的含义，惭愧。<br /></p>
		<p>规则和限制<br />　　1、泛型的类型参数只能是类类型（包括自定义类），不能是简单类型。<br />　　2、同一种泛型可以对应多个版本（因为参数类型是不确定的），不同版本的泛型类实例是不兼容的。<br />　　3、泛型的类型参数可以有多个。<br />　　4、泛型的参数类型可以使用extends语句，例如&lt;T extends superclass&gt;。习惯上称为“有界类型”。<br />　　5、泛型的参数类型还可以是通配符类型。例如Class&lt;?&gt; classType = Class.forName(java.lang.String);<br /><br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.Gavin.fanxing;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_49_472_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_472_Open_Text.style.display='none'; Codehighlighter1_49_472_Closed_Image.style.display='inline'; Codehighlighter1_49_472_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_49_472_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_49_472_Closed_Text.style.display='none'; Codehighlighter1_49_472_Open_Image.style.display='inline'; Codehighlighter1_49_472_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> GenDemo </span>
				<span id="Codehighlighter1_49_472_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_49_472_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_91_470_Open_Image" onclick="this.style.display='none'; Codehighlighter1_91_470_Open_Text.style.display='none'; Codehighlighter1_91_470_Closed_Image.style.display='inline'; Codehighlighter1_91_470_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_91_470_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_91_470_Closed_Text.style.display='none'; Codehighlighter1_91_470_Open_Image.style.display='inline'; Codehighlighter1_91_470_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args) </span>
						<span id="Codehighlighter1_91_470_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_91_470_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 定义泛型类Gen的一个Integer版本</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        Gen</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">Integer</span>
								<span style="COLOR: #000000">&gt;</span>
								<span style="COLOR: #000000"> intOb </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Gen</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">Integer</span>
								<span style="COLOR: #000000">&gt;</span>
								<span style="COLOR: #000000">(</span>
								<span style="COLOR: #000000">88</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        intOb.showTyep();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> i </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> intOb.getOb();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">value= </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> i);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">----------------------------------</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 定义泛型类Gen的一个String版本</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        Gen</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">String</span>
								<span style="COLOR: #000000">&gt;</span>
								<span style="COLOR: #000000"> strOb </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Gen</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">String</span>
								<span style="COLOR: #000000">&gt;</span>
								<span style="COLOR: #000000">(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Hello Gen!</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        strOb.showTyep();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String s </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> strOb.getOb();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">value= </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> s);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_488_732_Open_Image" onclick="this.style.display='none'; Codehighlighter1_488_732_Open_Text.style.display='none'; Codehighlighter1_488_732_Closed_Image.style.display='inline'; Codehighlighter1_488_732_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_488_732_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_488_732_Closed_Text.style.display='none'; Codehighlighter1_488_732_Open_Image.style.display='inline'; Codehighlighter1_488_732_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> Gen</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">T</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> </span>
				<span id="Codehighlighter1_488_732_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_488_732_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> T ob; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 定义泛型成员变量</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_536_555_Open_Image" onclick="this.style.display='none'; Codehighlighter1_536_555_Open_Text.style.display='none'; Codehighlighter1_536_555_Closed_Image.style.display='inline'; Codehighlighter1_536_555_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_536_555_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_536_555_Closed_Text.style.display='none'; Codehighlighter1_536_555_Open_Image.style.display='inline'; Codehighlighter1_536_555_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> Gen(T ob) </span>
						<span id="Codehighlighter1_536_555_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_536_555_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.ob </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> ob;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_576_592_Open_Image" onclick="this.style.display='none'; Codehighlighter1_576_592_Open_Text.style.display='none'; Codehighlighter1_576_592_Closed_Image.style.display='inline'; Codehighlighter1_576_592_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_576_592_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_576_592_Closed_Text.style.display='none'; Codehighlighter1_576_592_Open_Image.style.display='inline'; Codehighlighter1_576_592_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> T getOb() </span>
						<span id="Codehighlighter1_576_592_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_576_592_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> ob;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_620_639_Open_Image" onclick="this.style.display='none'; Codehighlighter1_620_639_Open_Text.style.display='none'; Codehighlighter1_620_639_Closed_Image.style.display='inline'; Codehighlighter1_620_639_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_620_639_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_620_639_Closed_Text.style.display='none'; Codehighlighter1_620_639_Open_Image.style.display='inline'; Codehighlighter1_620_639_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> setOb(T ob) </span>
						<span id="Codehighlighter1_620_639_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_620_639_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.ob </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> ob;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_666_730_Open_Image" onclick="this.style.display='none'; Codehighlighter1_666_730_Open_Text.style.display='none'; Codehighlighter1_666_730_Closed_Image.style.display='inline'; Codehighlighter1_666_730_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_666_730_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_666_730_Closed_Text.style.display='none'; Codehighlighter1_666_730_Open_Image.style.display='inline'; Codehighlighter1_666_730_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> showTyep() </span>
						<span id="Codehighlighter1_666_730_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_666_730_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">T的实际类型是: </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> ob.getClass().getName());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<br />
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.Gavin.fanxing;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_39_306_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_306_Open_Text.style.display='none'; Codehighlighter1_39_306_Closed_Image.style.display='inline'; Codehighlighter1_39_306_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_39_306_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_306_Closed_Text.style.display='none'; Codehighlighter1_39_306_Open_Image.style.display='inline'; Codehighlighter1_39_306_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> Gen2 </span>
				<span id="Codehighlighter1_39_306_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_39_306_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Object ob; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 定义一个通用类型成员</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_100_119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_119_Open_Text.style.display='none'; Codehighlighter1_100_119_Closed_Image.style.display='inline'; Codehighlighter1_100_119_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_100_119_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_100_119_Closed_Text.style.display='none'; Codehighlighter1_100_119_Open_Image.style.display='inline'; Codehighlighter1_100_119_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> Gen2(Object ob) </span>
						<span id="Codehighlighter1_100_119_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_100_119_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.ob </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> ob;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_145_161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_145_161_Open_Text.style.display='none'; Codehighlighter1_145_161_Closed_Image.style.display='inline'; Codehighlighter1_145_161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_145_161_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_145_161_Closed_Text.style.display='none'; Codehighlighter1_145_161_Open_Image.style.display='inline'; Codehighlighter1_145_161_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> Object getOb() </span>
						<span id="Codehighlighter1_145_161_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_145_161_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> ob;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_194_213_Open_Image" onclick="this.style.display='none'; Codehighlighter1_194_213_Open_Text.style.display='none'; Codehighlighter1_194_213_Closed_Image.style.display='inline'; Codehighlighter1_194_213_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_194_213_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_194_213_Closed_Text.style.display='none'; Codehighlighter1_194_213_Open_Image.style.display='inline'; Codehighlighter1_194_213_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> setOb(Object ob) </span>
						<span id="Codehighlighter1_194_213_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_194_213_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.ob </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> ob;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_240_304_Open_Image" onclick="this.style.display='none'; Codehighlighter1_240_304_Open_Text.style.display='none'; Codehighlighter1_240_304_Closed_Image.style.display='inline'; Codehighlighter1_240_304_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_240_304_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_240_304_Closed_Text.style.display='none'; Codehighlighter1_240_304_Open_Image.style.display='inline'; Codehighlighter1_240_304_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> showTyep() </span>
						<span id="Codehighlighter1_240_304_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_240_304_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">T的实际类型是: </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> ob.getClass().getName());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_332_755_Open_Image" onclick="this.style.display='none'; Codehighlighter1_332_755_Open_Text.style.display='none'; Codehighlighter1_332_755_Closed_Image.style.display='inline'; Codehighlighter1_332_755_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_332_755_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_332_755_Closed_Text.style.display='none'; Codehighlighter1_332_755_Open_Image.style.display='inline'; Codehighlighter1_332_755_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> NoGenDemo </span>
				<span id="Codehighlighter1_332_755_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_332_755_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_374_753_Open_Image" onclick="this.style.display='none'; Codehighlighter1_374_753_Open_Text.style.display='none'; Codehighlighter1_374_753_Closed_Image.style.display='inline'; Codehighlighter1_374_753_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_374_753_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_374_753_Closed_Text.style.display='none'; Codehighlighter1_374_753_Open_Image.style.display='inline'; Codehighlighter1_374_753_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args) </span>
						<span id="Codehighlighter1_374_753_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_374_753_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 定义类Gen2的一个Integer版本</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        Gen2 intOb </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Gen2(</span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Integer(</span>
								<span style="COLOR: #000000">88</span>
								<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        intOb.showTyep();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> i </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (Integer) intOb.getOb();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">value= </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> i);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">----------------------------------</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 定义类Gen2的一个String版本</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        Gen2 strOb </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Gen2(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Hello Gen!</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        strOb.showTyep();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String s </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (String) strOb.getOb();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">value= </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> s);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
<img src ="http://www.blogjava.net/jzone/aggbug/286442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-07-12 12:13 <a href="http://www.blogjava.net/jzone/articles/286442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口 &amp;&amp; 抽象类</title><link>http://www.blogjava.net/jzone/articles/286434.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 12 Jul 2009 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/286434.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/286434.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/286434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/286434.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/286434.html</trackback:ping><description><![CDATA[java不允许多重继承<br /><br />正是因为java不支持多继承才产生了接口，java允许实现多个接口，接口就是给出一些没有内容的方法，要注意的是想用接口必须实现接口的所有方法<br /><br />接口是用来规范类的，它可以避免类在设计上的不一致，这在多人合作的开发中犹为重要，就比如接口中有A方法那么实现这个接口就必须实现A方法这就形成了一种规范，也就是说，A继承了B，但却想使用C的一个方法，但又不能再继承，所以就使用了C的接口。 <br /><br /><strong>Java 接口和Java抽象类代表的就是抽象类型，就是我们需要提出的抽象层的具体表现。OOP面向对象的编程，如果要提高程序的复用率，增加程序的可维护性，可扩展性，就必须是面向接口的编程，面向抽象的编程，正确地使用接口、抽象类这些太有用的抽象类型做为你结构层次上的顶层。 <br /></strong><br />Java接口和Java抽象类有太多相似的地方，又有太多特别的地方：<br /><br />1、抽象类可以提供某些方法的部分实现，接口不可以，如果向一个抽象类里加入一个新的具体方法时，那么它所有的子类都能得到了这个新方法，而接口做不到这一点，如果向一个接口里加入一个新方法，所有实现这个接口的类就无法成功通过编译了，因为你必须让每一个类都再实现这个方法才行，这显然是Java接口的缺点。 <br /><br />2、一个抽象类的实现只能由这个抽象类的子类给出，也就是说，这个实现处在抽象类所定义出的继承的等级结构中，而由于Java语言的单继承性，所以<strong>抽象类作为类型定义工具的效能大打折扣</strong>。在这一点上，Java接口的优势就出来了，任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型，因为类可以实现任意多个Java接口，从而这个类就有了多种类型。 <br /><br />3、从第2点不难看出，Java接口是定义混合类型的理想工具，混合类表明一个类不仅仅具有某个主类型的行为，而且具有其他的次要行为。 <br /><br />4、结合1、2点中抽象类和Java接口的各自优势，具精典的设计模式就出来了：声明类型的工作仍然由Java接口承担，但是同时给出一个Java抽象类，且实现了这个接口，而其他同属于这个抽象类型的具体类可以选择实现这个Java接口，也可以选择继承这个抽象类，也就是说在层次结构中，Java接口在最上面，然后紧跟着抽象类，哈，这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。 <br />在Java语言API中用了这种模式，而且全都遵循一定的命名规范：Abstract ＋接口名。 <br /><br />Java接口和Java抽象类的存在就是为了用于具体类的实现和继承的，如果你准备写一个具体类去继承另一个具体类的话，那你的设计就有很大问题了。Java抽象类就是为了继承而存在的，它的抽象方法就是为了强制子类必须去实现的。 <br /><br />使用Java接口和抽象Java类进行变量的类型声明、参数是类型声明、方法的返还类型说明，以及数据类型的转换等。而不要用具体Java类进行变量的类型声明、参数是类型声明、方法的返还类型说明，以及数据类型的转换等。 <br /><br />我想，如果你编的代码里面连一个接口和抽象类都没有的话，也许我可以说你根本没有用到任何设计模式，任何一个设计模式都是和抽象分不开的，而抽象与Java接口和抽象Java类又是分不开的。 <br /><img src ="http://www.blogjava.net/jzone/aggbug/286434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-07-12 11:07 <a href="http://www.blogjava.net/jzone/articles/286434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>