您的位置:首页 > 其它

面向对象三大特点的理解---比喻的很形象

2015-10-23 11:24 232 查看
封装:

首先,属性可用来描述同一类事物的特征,行为可描述一类事物可做的操作,

封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中,以方便使用.

比如人这个东东,可用下面的方式封装:

人{

年龄(属性一)

身高(属性二)

性别(属性三)

做事(行为之一)

走路(行为之二)

说话(行为之三)

}

继承:

由于封装,使得有共同特征的一类事物的所有描述信息都被归于一类之中,

但我们知道,这并不是万能的,有些事物有共性,但还存在区别,

比如教师,简单封装起来如下:

教师{

年龄(属性一)

身高(属性二)

性别(属性三)

做事(行为之一)

走路(行为之二)

说话(行为之三)

教书(行为之四)

}

上面对"教师"的封装,与对"人"的封装基本上差不多,只是多了一个特征行为:教书,

教师有与人一样的共性,但我们不能说"人教书",也就是不能把教书封装到"人"之中去,

教书是教师的特征行为之一.为了省事地封装教师(代码的复用,这只是继承存在的原因之一),

可以让教师去继承人,如:教师extends人{教书(行为之三)}

这样,我们就不用重新定义那些已经被"人"这一个类所封装的那些属性与行为了,而

只需要使用继承的方式,在人的基础上拓展教师专有的行为,即"教书"即可把教师描述出来;这样的结果,

即是教师也同时拥有"人"之中所封装的一切属性与行为,还拥有自己的特征行为"教书".

多态:

多态的概念发展出来,是以封装和继承为基础的简单的理解一下多态,比如:

人这个类,封装了很多人类共有的特性,

教师是人的子类,继承了人的属性与行为,

当然教师有自己的特征行为,比如教书授课;

学生是人的子类,继承了人的属性与行为,当然学生有自己的特征行为,比如学习做作业;

现在,当我们需要去描述教师与学生各自的行为的时候,我们可以分开来说

"教师在授课","学生做作业",但如果我们要站在抽象的角度,也就是从教师与学生的父类"人"的角度,

来同时描述他们各自的行为时,我们怎么描述"人在授课" "人在做作业"?这是不是怪怪的很不合适不合适的问题就在于,

对于行为主体,我们使用了抽象层次的东东"人",而对于行为本身,我们却使用了具体的东东"授课"与"教书".怎么解决呢?

那就需要解决抽象与具体的矛盾问题.既然是站在抽象在角度来描述,那我们把行为抽象一下,

不就能同时描述了吗?比如"人在做事"(教师授课与学生做作业都可以说***在做事),

这样就解决了抽象层次与具体层次之间的矛盾.到了这一步,我们可以把两个描述:

"教师在做事","学生在做事"。两者统一为"人在做事",然后,我们可以在"教师"的"做事"行为中

去调用教师自己的特征行为"授课",在"学生"的"做事"行为中去调用学生自己的特征行为"做作业",

所以,当调用"人"去"做事"的时候,如果这个人是教师,那他所做的事实际上就是"教书",

如果这个人是学生,那他所做的事实际上就是"做作业".也就是说在这里"人"是多态的,

在不同的形态时,特征行为是不一样的,这里的"人",同时有两种形态,一种是教师形态,

一种是学生形态,所对应的特征行为分别是"授课"与"做作业".

FROM:http://wenku.baidu.com/link?url=zOCkRGHSkN-MIHgOipMMwo4KB9sMhgGnAcFXBYAiH3xuyvpeezaN_u_g96EG8IrwjJoPraD1kWrOQfrVXiRfAlR8PZgH_ujsMvSLdVrYrTO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: