﻿<?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-风子的咖啡屋</title><link>http://www.blogjava.net/chering/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 07:52:42 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 07:52:42 GMT</pubDate><ttl>60</ttl><item><title>多态</title><link>http://www.blogjava.net/chering/archive/2006/03/21/36539.html</link><dc:creator>风子</dc:creator><author>风子</author><pubDate>Tue, 21 Mar 2006 00:32:00 GMT</pubDate><guid>http://www.blogjava.net/chering/archive/2006/03/21/36539.html</guid><wfw:comment>http://www.blogjava.net/chering/comments/36539.html</wfw:comment><comments>http://www.blogjava.net/chering/archive/2006/03/21/36539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chering/comments/commentRss/36539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chering/services/trackbacks/36539.html</trackback:ping><description><![CDATA[
		<p>　　什么叫多态？我们先来谈谈继承。在面向对象的编程中，继承是一种常用的技术。假设有一个类Shap，Shap有两个方法，即draw()和erase()。Circle也是一种特殊Shap,所以只需要使用继承的方法，使用class Cricle<strong></strong><font color="#800080"><strong>extends</strong></font><font color="#000000">Shap语句就可以创建一个新类Circle。Circle类具有Shap类的全部特征，包括所有的方法。这里只介绍了继承，到底这和多态有什么关系，到底什么又叫多态呢？看下面的语句：<br /> class Shap {<br /> void draw(){<br />  System.out.println("Shap.draw()");<br /> }<br /> void erase(){<br />  System.out.println("Shap.erase()");<br /> }</font></p>
		<p>
				<font color="#000000">
				</font> </p>
		<p>
				<font color="#000000">}<br />class Circle extends Shap{<br /> void draw(){<br />  System.out.println("Circle.draw()");<br /> }<br /> void erase(){<br />  System.out.println("Circle.erase()");<br /> }<br />}</font>
		</p>
		<p>
				<font color="#000000">
				</font> </p>
		<p>
				<font color="#000000">class Square extends Shap{<br /> void draw(){<br />  System.out.println("Square.draw()");<br /> }<br /> void erase(){<br />  System.out.println("Square.erase()");<br /> }<br />}</font>
		</p>
		<p>
				<font color="#000000">public class Picture{<br /> <font color="#ff0000"><strong>void add(Shap s){<br />  s.draw();<br /> }<br /></strong></font> public static void main(String[] args) {<br />  Picture p=new Picture();<br />  Shap[] e={<br />    new Circle(),<br />    new Square()<br />  };<br />  for(int i=0;i&lt;e.length;i++)<br />  <font color="#000000"><strong><font color="#ff0000">p.add(e[i]);</font><br /></strong></font> }<br /> <br />}<br />注意看上面加红色的语句，及void add(Shap s){s.draw();}这表示一个Picture类的一个方法要使用Shap类作为形式参数并调用该参数的draw()方法。我们在接下来的语句中看到，不管你的Shap类的子类是Circle还是Square，在传递给方法add()后，add()能自动判断是调用Circle的draw（）方法还是Square的draw()方法。JAVA这种“后期绑定”的本领就叫做多态。可以看出，你不必专门为Circle类写一个add()方法，再为Square写一个add（）方法，只需要为它们的基类写一个方法，剩下的编译器就能为你自动选择你想要调用的正确的方法。如果多态仅仅是一种“向上转型”的形式的话，我们得到的仅仅是节省了一点代码的话，也许我们不必要给予太多的关注，那多态到底有什么其它好处呢？在上面的例子中新加一个Line类，它也继承了Shap类，如下所示：<br /> class Shap {<br /> void draw(){<br />  System.out.println("Shap.draw()");<br /> }<br /> void erase(){<br />  System.out.println("Shap.erase()");<br /> }</font>
		</p>
		<font color="#000000">
				<p> </p>
				<p>}<br />class Circle extends Shap{<br /> void draw(){<br />  System.out.println("Circle.draw()");<br /> }<br /> void erase(){<br />  System.out.println("Circle.erase()");<br /> }<br />}</p>
				<p> </p>
				<p>class Square extends Shap{<br /> void draw(){<br />  System.out.println("Square.draw()");<br /> }<br /> void erase(){<br />  System.out.println("Square.erase()");<br /> }<br />}<br /><br /><font color="#ff0000">class Line extends Shap{<br /> void draw(){<br />  System.out.println("Line.draw()");<br /> }<br /> void erase(){<br />  System.out.println("Line.erase()");<br /> }<br />}</font></p>
				<p>public class Picture{<br /> void add(Shap s){<br />  s.draw();<br /> }<br /> public static void main(String[] args) {<br />  Picture p=new Picture();<br />  Shap[] e={<br />    new Circle(),<br />    new Square(),<br />    <font color="#ff0000">new Line()<br /></font>  };<br />  for(int i=0;i&lt;e.length;i++)<br />  p.add(e[i]);<br /> }<br /> <br />}<br /><br />可以看出add()方法根本不必要知道有新类的增加而继续正常工作。咋看，这只不过还是节省了几行代码的问题，你可以为每个子类都写一个add()方法，同样能解决问题。有新类的加入时再为这个新类写add()方法。这不仅仅是节省了几行代码，多敲几行代码并不会如何提高编码的效率。这是一个思想，你根本不用关心基类今天多了一个子类，明天又多了一个子类，不用担心的你的代码中，对于新加入的子类能否正常的运行，因为你直接与基类的接口进行通信，避免了复杂性。换句话说，你的代码具有很好的可扩展性，基类可以随时根据需要进行扩展而不用担心代码的运行问题。</p>
		</font>
		<p>
				<font color="#000000">
				</font>
		</p>
<img src ="http://www.blogjava.net/chering/aggbug/36539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chering/" target="_blank">风子</a> 2006-03-21 08:32 <a href="http://www.blogjava.net/chering/archive/2006/03/21/36539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>final关键字的用法</title><link>http://www.blogjava.net/chering/archive/2006/03/19/36150.html</link><dc:creator>风子</dc:creator><author>风子</author><pubDate>Sun, 19 Mar 2006 15:25:00 GMT</pubDate><guid>http://www.blogjava.net/chering/archive/2006/03/19/36150.html</guid><wfw:comment>http://www.blogjava.net/chering/comments/36150.html</wfw:comment><comments>http://www.blogjava.net/chering/archive/2006/03/19/36150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chering/comments/commentRss/36150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chering/services/trackbacks/36150.html</trackback:ping><description><![CDATA[final关键字：<br />可以在三种情况下使用final，及final数据，final方法，final类<br />１．final数据。final修饰的数字表示一个永不改变的编译时常量，对这个常量定义时必须对其进行赋值，可以在构造器中对其进行赋值（这种方法又叫空白final）。<br />用final加static修饰的字段只占据一段不可改变的存储空间。<br />２．final方法。final方法是把方法锁定，确保在继承中该方法行为保持不变，并且不会被覆盖。<br />３．fianl类。final修饰的类不能有继承类。<img src ="http://www.blogjava.net/chering/aggbug/36150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chering/" target="_blank">风子</a> 2006-03-19 23:25 <a href="http://www.blogjava.net/chering/archive/2006/03/19/36150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我眼中的Eclipse和Netbeans</title><link>http://www.blogjava.net/chering/archive/2006/03/16/35527.html</link><dc:creator>风子</dc:creator><author>风子</author><pubDate>Thu, 16 Mar 2006 00:45:00 GMT</pubDate><guid>http://www.blogjava.net/chering/archive/2006/03/16/35527.html</guid><wfw:comment>http://www.blogjava.net/chering/comments/35527.html</wfw:comment><comments>http://www.blogjava.net/chering/archive/2006/03/16/35527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chering/comments/commentRss/35527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chering/services/trackbacks/35527.html</trackback:ping><description><![CDATA[我觉得这两种工具都很优秀，各有优缺点。不好意思说了句废话。再说句实话，本人对这两种工具都不是很熟悉（这么一来整篇文章都成废话了，呵呵）。说点实际点的，用了一会Netbeans，觉得真的很不错，感觉很爽，可惜的是字体实在是太难看了，尤其是output窗口的字体，参照了很多方法，折腾了两天都没把字体调过来。唉，两天时间很多同志连个小程序都编出来了，敝人不才，既然连个小字体都搞不定，惭愧之极！所以决定撤了，不然我的脑细胞就死在这个小破字体手里了，不值。等Netbeans什么时候把字体搞好了再说吧。你也许会问字体真的那么重要吗？这个问题嘛，嗯...，对我来说是很重要，因为我近似啊，呵呵，别说O和0，默认的字体连f和r我都分不清。说着，说着，天就亮了，夷，可是才刚天黑啊。是Eclispe的小月亮冒出来了，很喜欢这个启动界面，其实功能上80％和Netbeans都差不多，但是编译的速度我个人感觉比Netbeans更快，可以说快多了（windows下），最重要的是字体要好看多了，这样我就不用靠显示器太近来接受它的辐射了（听说显示器50厘米以内的辐射大的吓人啊）。有的细节上做的不如Netbeans，比如关键字自动提示，Netbeans不但有提示，还自动引用JDK文档，非常的方便。我知道自己说的比较肤浅，我前提不是已经说了我不熟嘛，等我满满熟悉这两种工具了，再说点有点深度的吧。不过，怎么就没有把两者的优点结合起来的工具呢？郁闷！<img src ="http://www.blogjava.net/chering/aggbug/35527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chering/" target="_blank">风子</a> 2006-03-16 08:45 <a href="http://www.blogjava.net/chering/archive/2006/03/16/35527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>