www.alphatom.com

统计

留言簿(1)

阅读排行榜

评论排行榜

多态? 你的理解是什么?

在博客园我曾经发过这么一个随笔,得到不少的相应,同样希望能听到java朋友们的高见

wayfarer
他的随笔中谈到了面试别人时的一个问题. 你是如何理解多态的.

我想每个人的理解都不同,那么我们就来集思广义吧.
你可以从概念层 实现层,各个层面谈谈你对它的理解.角度越多,越能加深我们对它的理解.

不过有个小要求,就是用一两句话把你的意思表达出来.越是精练的语言,越能反应问题的实质.
我们不要求全面但是要有内容.比如sumtec的面向对象就是面向接口.

不过这里不要求一定是自己的见解,也可以是别的大家的看法.
毕竟我们的目的是理解多态!

我先抛砖引玉:
多态就是实现将接口(不特指关键字interface)与实现分离的技术.


评论:

# re: 多态? 你的理解是什么? 2005-03-06 23:38 | alittlefish

在实际操作中,多态可以让我不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,而这些方法通过一个抽象类或者接口来实现。
从下往上看的话,多态实际上是多个对象的抽象,对它们进行通用编码。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 08:41 | 一切从.NET开始

没有多态,工厂方法模式的效果就大打折扣,或者可以说不可能实现 :)
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 08:47 | 小诈

对于相同的事件(不指一般我们说的那些事件),不同的对象表现出不同的行为(特征)。

删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 09:22 | KingofSC

多态给我的感觉就是提供父类调用子类代码的一个手段而已
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 09:29 | idior

很好,继续,希望看到更多更新的观点。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 10:08 | age0

继承的目的是复用,继承复用包括两方面的复用:抽象(接口)复用,实现(过程)复用。

多态的目的就是要将抽象复用及实现复用剥离开来,子类虽然拥有和父类一样的抽象接口,但实现过程却未必一样,多态的引入就是要在继承的基础上实现变异的可能性。当然子类继承也不一定会产生实现差异,所以多态允许在产生差异的时候override父类接口,没有产生差异的时候直接继承。

interface
则是另一种复用方式,interface只允许抽象复用,而禁止实现复用,所以interface比继承显得更轻量,但实际上系统中的实现复用必须由其他机制来保证。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 10:15 | age0

To idior,想用一两句话来解释清楚一个深奥的概念是不是有点不切实际。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 10:53 | rIPPER

一时 找不到sun oo-226课程了,里面应该有比较简单明确的定义
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 10:59 | sysword

我的理解,一个问题一般会表现在多个层面上,各个层面上抽象程度不同,多态正是思考问题过程中跨越各层的桥梁。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 11:09 | dudu

我觉得多态是在对象的基础上更高级的抽象, 它描述了一组具有共性的对象。
Allen Lee
的《今天你多态了吗?》值得一读: http://www.cnblogs.com/allenlooplee/archive/2004/11/02/59519.html
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 12:38 | 生活、工作

运行时,才明确具体是指那个对象,这给client代码,带来了很大的灵活性。使依赖注入、针对抽象与接口编程、同一行代码操作不同类的对象(用接口)等等成为可能。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 12:50 | idior

我比较喜欢生活、工作的描述
◎age0
如果概念解释是很难用一两句话说清。
但是就像生活、工作这样的描述就能有意义。


删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 17:43 | 班门弄斧

多态是多个对象UpCast的过程
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 19:56 | 丁丁

用人来表示基对象,多态就是对于不同种类的人(情圣或者情盲),拍MM马屁虽然目的相同,但是效果很不相同,情圣说你好漂亮就抱得MM归,而情盲拍得话,可能就被锯
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 22:57 | Neter

我比较同意小诈的观点,多态就是具有相似功能的对象,有着不同的表现方法和行为。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-08 01:32 | NickLedson

我的观点是大大增强代码的复用性,使得项目架构更加清晰,松耦合.
比如在实际应用中我可以轻松继承一个System.Window.Forms.Control命名空间下的类比如Button打造属于自己的NixButton类而当一些原有系统的方法参数要求的传入的参数类型是Button,我不必修改原有代码而直接把NixButton的实例对象传进去依然可用.

从而达到代码复用和架构松耦合的效果

子类继承了父类的所有接口,包括invoke handler/object对应表然后按继承关系和invoke handler不同而调用不同的实现代码!

删除评论  

# re: 多态? 你的理解是什么? 2005-03-08 09:44 | idior

小诈的观点确实比较简明的说出了多态的表现.
希望看到更加深刻透彻的观点.
删除评论  修改评论

# re: 多态? 你的理解是什么? 2005-03-11 16:15 | myx

一位司机在公共汽车上,有可能是乘客,有可能是司机,就就是多态吧^_^
删除评论  

# re: 多态? 你的理解是什么? 2005-03-13 06:21 | MindScape

和小作的差不多,多态的本质根本是语义相同。

多态是指,不同对象对应于同一动作语义具有不同的实际行为。


删除评论  

# re: 多态? 你的理解是什么? 2005-03-13 18:10 | 龙蛰(NeoLee)

呵,我也常在面试中提到对多态的理解,我的理解是:

接口是面象对象的实现,多态是面象接口的应用!

BTW:
不太认同sumtec的面向对象就是面向接口. 面象对象更多的是一种开发思想,接口更多的是实现技术,用就是来表达不确切,但这么形容也道出接口是面象对象开发中实现抽象最主要的手段!
删除评论  

# re: 多态? 你的理解是什么? 2005-03-13 21:56 | idior

sumtec的那句话当然不对,关键是道出很本质的东西。

我觉得多态是面向接口的保证,支持。 而不是应用,关系反了吧。
由于多态的支持才能面向接口。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-14 00:32 | 龙蛰(NeoLee)

句中的应用有两重含义:
其一,多态是接口的特性。其二,就是对接口的应用,如在子类中override父类接口。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-26 23:09 | jsports

我认为多态,首先蕴含有decorator 的味道---------->一样的接口,但是功能上增强了。

另外一方面,多太表明实现多态的class是一族的,
对外部(外人)来讲,只要知道有这个方法(标签),
具体运行时你是这个系列(族)的谁,我不关心,我只关心你能给我进行这个服务就行。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-27 08:30 | 生活、工作

通俗的说,先说明一项功能或动作,风马牛不相及的东西去实现它。

对服务器段代码而言:
订下这个功能的设计时间较长,但写时一下了就完成了,用1%的时间,但风马牛不相及的东西去实现它时,耗时就多了,用99%的时间。

对客户端代码而言:
从使用的角度说:好处还是我上面所说的。
从学院派的角度说:就是小诈的说法对于相同的事件(不指一般我们说的那些事件),不同的对象表现出不同的行为
删除评论  

# re: 多态? 你的理解是什么? 2005-03-27 11:41 | idior

jsports和生活、工作的观点都不错 :)
删除评论  修改评论

# re: 多态? 你的理解是什么? 2005-04-01 13:54 | ttyp

多态是和继承相反的概念
多态是父类调子类的实现,继承是子类调父类的实现,由于多态时不知道会被哪个子类继承,所以定义的东西都是虚函数,当你执行这个虚函数时,首先找到该虚函数代表的实体子类,并执行子类中的相关代码
删除评论  

# re: 多态? 你的理解是什么? 2005-04-01 14:08 | idior

@ttyp
多态是和继承相反的概念 interesting idea!
删除评论  修改评论

# re: 多态? 你的理解是什么? 2005-04-09 13:24 | huangyi

我从客户和服务的角度来理解 就是

服务可以由许多人来提供。
而客户只管使用服务,不需要知道服务的来源更不需要知道服务是如何实现的。另外,客户也许还会有小秘,专门帮客户选择服务的。

哎 多态让客户太舒服了啊 呵呵

 

posted on 2005-04-09 16:13 idior 阅读(1254) 评论(6)  编辑  收藏

评论

# re: 多态? 你的理解是什么? 2005-04-09 23:29 Pootow

我以前是学C++的,那时候,人们说的多态分两种,称作编译时多态和运行时多态。
变异是多态的一个例子就是函数重载。
运行时多态的例子就是virtual带来的通过基类指针操作实际子类型的能力。
可见,多态就是指同样的一份代码,却可以做出不同动作。  回复  更多评论   

# re: 多态? 你的理解是什么? 2005-06-30 15:50 sumtec

今天为了搜点什么东西搜到这里,才发现原来以前的讨论还跟我扯上关系了。不过我觉得有人说“接口更多的是实现技术”,觉得有点反了。  回复  更多评论   

# re: 多态? 你的理解是什么? 2006-02-22 22:42 kknd

core java i 的5e是这么说的: 多态就是一个对象变量能指向多种实际类型的现象叫多态 这可是最浅显直接的回答了, 呵呵.   回复  更多评论   

# re: 多态? 你的理解是什么?[未登录] 2007-11-23 10:26 long

多态就是通过接口访问具体对象方法的技术  回复  更多评论   

# re: 多态? 你的理解是什么? 2008-07-06 16:30 cowboy

人多来说 反而会起反作用

对于多态 我已经无从理解了  回复  更多评论   

# field_subject_ricdronmon 2009-05-15 13:41 nick_ouzels

http://www.message_roletoacboce.com/  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: