多态

来源:互联网 发布:java全局map 编辑:程序博客网 时间:2024/06/18 07:54

多态

PS:这应该是在昨天晚上发的,但是忙到太晚了,就换在早上发了。以后要注意一下对时间的分配,安排合理,事情就会做得有效率。

百度百科的解释:多态性是允许你将副对象设置成为和一个或多个的它的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给他的子对象的特性以不同的方式运作。也就是允许将子类类型的指针赋值给父类类型的指针

看完视频,再看完上面说的,实际上我仍是一头雾水,只是知道了一些语法规则,但对于什么情况下用多态,为什么要用多态依然不太明白,在网上找了一些资料来看,懵懵懂懂的,后来跟同学激烈讨论,总算是有了一点儿眉目,下面仔细描述一下自己的理解,谬误之处,还望看到的大神指正。(跟人讨论真的是学习理解一个知识的强有力的方法!

多态使用需满足三个条件:

(1)继承

(2)重写

(3)父类引用指向子类对象

看到网上讲游戏开发中人物动作的例子,对于我这种初学者来说还是难以理解,这种实际应用的例子如果没有伪代码之类的支撑,还是让人难以接受。思索中我想到一个问题:如果取一个比较极端的情况,父类中只有一种方法,且衍生的子类都要对其进行重写,那么还需要多态吗

猜想的是:不需要,因为继承下来的东西都得改变,那么何必要再通过父类去访问子类,直接访问子类不就好了吗?

如果这个猜想成立的话,那么多态使用必然是在这样的一种环境下:存在某一类的方法,这一类的方法被子类继承,并且不会是所有的子类都对其进行重写,那么考虑到代码的重复利用,应该使用多态。

想到这里,我觉得理解多态了,但同学举的游戏的例子不是完全匹配我的猜想,尤其是对于最初的猜想实际上也应该使用多态,那这是为什么呢?我们考虑一下使用多态的第三个条件,要知道,我们说的访问,都是通过地址(即指针)来实现(该处理解是否正确,目前未知),如果有非常多的子类的话,如何快速的确定是哪一个子类,从而对其进行访问就是一个很大的工程。因此又有了一个猜想多态的使用是否就是JAVA在底层完成了我们程序员需要进行的查找的操作?如果是这样的话,那JAVA中对于这些类的地址(指针)是如何进行存储以及排序查找的,这又涉及到数据结构的知识了。而对于排序查找,又是一个大工程,你如何确定哪几种方法就是效率高的,就是最优的。如果选择不当,那么在应用中岂不是会造成效率的降低,这是个大问题。

讨论完之后,其实对多态更加的迷惑了,因为可能涉及到一些很底层的东西,自己学艺不精,而这些身边又没有人去研究底层的东西,更关键的是自己没有那么多的时间和精力去刨根问底了,没办法,就先这么理解着吧,相信随着对JAVA学习的深入,会慢慢打败这个强大的对手——多态!

越学越发现自己的无知。发现谦虚不需要刻意为之,学得越多,越觉得没有任何理由不谦虚。

0 0
原创粉丝点击