日期:2014-05-20  浏览次数:20711 次

初学java 一个问题
郁闷了书上讲的很是不清楚,。  
这些代码
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;
谁帮解释一下,谢谢了!
郁闷了   书上连啥是引用都没讲。,这个来帮忙讲讲吧!十分感谢!明天换书去!

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

但愿这样解释你能看明白。
还有,你那是什么书啊?!这个都不解释?

------解决方案--------------------
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();这样就可以动态决定使用什么方法访问数据库了。