本人快奔三的人了,为了混口饭吃,开始啃起了J2SE,由于初学,很多东西不明白,别说看书,就是看教学视频也不是很清楚.这一个星期一直在看类,构造方法,继承,覆盖,重载,多态.尤其是多态搞了好几天,今天中午跑去书店又查了半天资料,终于让我明白了.    本来早上就发了一贴请教多态问题,回来一看,27人回贴,还没看回贴就感觉到心里暖暖的.感谢各位帮助过我,和即将帮助我的各位大侠,我在这里祝大家十一愉快了~~~~~~~~~顺便我来阐述一下我认为的多态的意思,大侠们看看我说的对不对.(1) 需要子类继承父类.
(2) 需要子类至少有一种方法和父类的一样.而且子类覆盖了这个父类的方法.
(3) 比如说  Car 类有个 a1 方法.
            Bmw 类也有 a1 方法.
            Car t = new BMW();
            t.a1()   
 //虽然我是调用的父类Car的a1方法,但是实际上子类Bmw的a1方法已经把父类的a1()覆盖了,也就是说,
     实际上我是调的Bmw的a1方法,这就叫多态.
  这样很灵活,我Car不用重新写,如果有和Benz的子类,那我直接 Car t = new Benz();我的Car类就变成Benz了.是这样吗?

解决方案 »

  1.   


    本人还有个地方不理解,就是强制类型转换.
    Car t = new Bmw();
    Bmw m = (Bmw)t;
    这句话的意思我理解,就是用 m.方法 m.属性 调子类Bmw的属性和方法了.
    我的意思是直接 Bmw m = Bmw ();这样不是更直观,更简单吗?为什么非要弄成强制类型转换这么麻烦呢?
      

  2.   

    是j2se 还是 j2ee !看你应该学的是后者,支持你!明天会更好的!
      

  3.   

    举个例子:
    一个停车场只能停车,但看门的大爷不知道宝马也是车,只认识普通车。但你说是车就让你开进去。所以你就要开着你的宝马并包装一下,告诉他这是车,Car t = new Bmw(); 好的你可以进去了。但进去之后你要炫耀,要告诉里面的人这不仅仅是车还是宝马,所以要把刚才伪装成普通车样子的宝马强制变回来。 Bmw m = (Bmw)t; 
      

  4.   

    初学java还是建议先找本薄的面向对象程序设计的书翻翻
      

  5.   

    5楼说的很形象!!
    最近在看 Java核心技术I,蛮有收获的!
      

  6.   

    用Car t = new Bmw();而不直接Bmw m = Bmw ();主要是要利用多态的带来的好处
    举个例子,有如下代码:
    Car t = new Bmw();
    Car s = new Toyota();
    void method(Car car){car.a1;}
    这时候,利用多态,t和s都可以作为参数传给method方法,然后在method内部去调用各自的a1方法
    如果没有多态:
    Bmw t = new Bmw();
    Toyota s = new Toyota();
    那么这时候,就无法写一个像上面那样的方法来统一调用不同子类的Car的a1方法
      

  7.   

    另外,强制类型转换前,通常做一个检查比较好:
    if (t instanceof Bmw)
        Bmw m = (Bmw)t; 
    这个例子中t和Bmw的关系比较明显,可能不是很有必要做这个检查,但有些复杂情况下还是很有必要的最后,楼主请注意结贴~谢谢=)