郁闷了书上讲的很是不清楚,。 
这些代码
public static void main(String args[])
{
   Shape fobj;
   Square sqobj=new Square(10,20);
   Triangle trobj=new Triangle(12,8);
   fojb=sqobj;
   System.out.println(fobj.area());
   fobj=trobj;
   System.out.println(fobj.area());
}只给出了有问题的那些代码 。 这里Shape是父类也是抽像类 Square 和Triangle都是它的子类Square 和Triangle都重写了shape里的area方法
这两句代码我不懂是什么意思
   fojb=sqobj;
   fobj=trobj;
谁帮解释一下,谢谢了!
郁闷了 书上连啥是引用都没讲。,这个来帮忙讲讲吧!十分感谢!明天换书去!

解决方案 »

  1.   

    这是OOP里面的多态性。
    在JAVA里面,你可以声明一个父类(或接口)的引用来指向其具体的子类。就像你这里的例子。在调用这个引用的某个方法的时候,系统会自动去调用该类具体对象(引用所指对象)的方法。在你的例子里面,就是在调用area()的时候,系统会调用Square的area()或者Triangle的area(),而不是调用Square的area方法。
    就像你要找一个人(Person p)来唱歌,我给你找了个女人(p = woman),当你叫这个人执行唱歌这个动作(p.sing())的时候,发出的是女声(woman.sing())。如果我给你找了个男人(p = man),当你叫他执行唱歌这个动作(p.sing())的时候,发出的是男声(man.sting())。但愿这样解释你能看明白。
    还有,你那是什么书啊?!这个都不解释?
      

  2.   

    你要知道堆和栈的概念
    堆里存放的是fobj的地址,栈里存放的是fobj值的地址
    fobj指向fobj的值
    也就是说fobj引用fobj的值
      

  3.   

    我不明白的是它为什么要这么写? 先Shape fobj; 然后再给这个fobj赋值,这样看着不是更麻烦么?  能不能给我一个具体的例子来说明多态性的好处? 请不要只给理论说哪里好 这样看不懂 。。 谢谢啦!
      

  4.   

    joejoe1991() ( ) 信誉:100    Blog   加为好友  2007-05-03 18:07:12  得分: 0  
     
     
       我不明白的是它为什么要这么写? 先Shape fobj; 然后再给这个fobj赋值,这样看着不是更麻烦么?  能不能给我一个具体的例子来说明多态性的好处? 请不要只给理论说哪里好 这样看不懂 。。 谢谢啦!
      
     
    ---------------------------------
    比如这样
    你的Shape里面有一个show方法,打印出是什么形状,有2个类:
    Circle,Triangle
    然后有一个方法:
    public void showShape(Shape shape){
       shape.show();
    }这样,当你调用showShape(new Circle())的时候打印的就是Circle,而调用showShape(new Triangle())的时候就是打印的Triangle,如果好处还是不明显,那么你就想象你的类里面有一个DAO的基类,而有2个不同的类来继承DAO类,这2个类用不同的方式访问数据库,那么以后你用DAO dao = new XX();这样就可以动态决定使用什么方法访问数据库了。
      

  5.   

    ■■国产类似tomcat的"kangaroo_web_egg"web服务器正式发布,免费且开源    在java中间件中大部分人都知道tomcat,一个开源免费的web服务器,不过今天要介绍的是一个国内自主开发的web服务器,它的名字叫“kangaroo_web_eggkangaroo_web_egg”,同样是开源免费的,但是它所运行的不是JSP脚本语言,而是自己开发的DQM脚本语言,其拥有自己的容器用于执行DQM动态文件,我们称之为DQM容器。DQM很类似与JSP,但是比JSP来的简单,所以如果你会JSP那么只需要稍看DQM就会理解。
       那么这个服务器有什么特点呢?
      1、不需要配置XML文件:以前我们 使用J2EE服务器时都时常需要配置XML文件,而kangaroo_web_egg则不需要,即使使用MVC结构时也是用动态页面进行逻辑控制。
        2、完善的国际化支持:每个涉及到内容输出或读取的方法都重载了带有字符集的方法,这样就不需要再去编写麻烦的过滤器,只需要简单的提供当前所需要使用的字符集。
      3、有条件的文件输出:BBS的web程序中经常会遇到这样一种情况,允许用户自行上传文件,而上传后的文件必须满足某些条件才能够被访问(读取、下载),这里所指的某些条件例如只有登录用户才能够访问,或者购买了BBS主题后才能访问等等。类似情况在其它web应用中也有很多,那该如何实现这种功能呢?以前我们都是自己写一个servlet进行有条件的文件输出,可是这样会很麻烦,如果要支持断点续传的需要那么自己还要写上一大段程序,要完全符合HTTP协议进行文件输出那么就更加困难了,而在kangaroo_web_egg只需要简单的使用内置方法即可。
      4、command内置对象:kangaroo_web_egg有一个全新的内置对象command,用户可以通过此对象来查看或修改服务器当前信息,利用此对象还可以在不停服务器的情况修改服务器的某些设置,比如不中断服务的情况下软重启服务器。
      5、生成静态页面:通 有些情况下,动态页面执行后的内容会长时间不变,但是访问的人却很多,如果生成静态页面那么就可以免去了执行动态文件和读取数据库的开销。kangaroo_web_egg内置了自动的生成静态页面的功能,只需要简单编程就可以自动生成静态页面了。
      5、编译及隐藏源代码:kangaroo_web_egg可以关闭自动编译功能,只运行编译后的页面,同时提供了编译整个web应用及隐藏动态页面源代码的功能。
     
      kangaroo_web_eggweb服务器的官方网站:kweb.go.3322.org