本人快奔三的人了,为了混口饭吃,开始啃起了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了.是这样吗?
(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了.是这样吗?
本人还有个地方不理解,就是强制类型转换.
Car t = new Bmw();
Bmw m = (Bmw)t;
这句话的意思我理解,就是用 m.方法 m.属性 调子类Bmw的属性和方法了.
我的意思是直接 Bmw m = Bmw ();这样不是更直观,更简单吗?为什么非要弄成强制类型转换这么麻烦呢?
一个停车场只能停车,但看门的大爷不知道宝马也是车,只认识普通车。但你说是车就让你开进去。所以你就要开着你的宝马并包装一下,告诉他这是车,Car t = new Bmw(); 好的你可以进去了。但进去之后你要炫耀,要告诉里面的人这不仅仅是车还是宝马,所以要把刚才伪装成普通车样子的宝马强制变回来。 Bmw m = (Bmw)t;
最近在看 Java核心技术I,蛮有收获的!
举个例子,有如下代码:
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方法
if (t instanceof Bmw)
Bmw m = (Bmw)t;
这个例子中t和Bmw的关系比较明显,可能不是很有必要做这个检查,但有些复杂情况下还是很有必要的最后,楼主请注意结贴~谢谢=)