首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多态性不只是封装的结果吗?

多态性不只是封装的结果吗?
EN

Stack Overflow用户
提问于 2018-05-11 15:48:01
回答 5查看 184关注 0票数 1

我一直在读Herbert的Java“完整参考”第八版。

第二章第22页上有一段。

最后一个属性,多态性,清楚地反映在能力汽车制造商提供广泛的选择基本上相同的车辆。例如,你可以得到防抱死制动系统或传统的刹车,动力或齿条和小齿轮转向,和4,6,或8缸发动机.无论哪种方式,你仍然会按刹车踏板停止,转动方向盘改变方向,并按油门时,你想要移动。可以使用相同的接口来控制许多不同的实现。

现在,在关于封装页18的同一章中,

此外,在传输中发生的事情不影响传输之外的对象。例如,换档不会打开前灯!由于自动变速器是封装的,几十个汽车制造商可以用他们喜欢的任何方式实现一个。然而,从司机的角度来看,他们的工作都是一样的。同样的想法也可以应用到编程中。 汽车制造商之所以可以改变这些(防抱死制动系统或传统的刹车系统、动力或齿条和齿轮转向,以及4-、6-或8缸发动机)的唯一原因,不是因为其他系统是由这些引擎封装的,不会因为更换它们而受到影响吗?

对不起,如果我在哪里出了差错。

我的问题是,

封装真的与多态有因果关系吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-05-11 16:08:44

封装你的车是由不同的部件组成的。你可能有4倍的车轮,前照灯等,他们都包含在“汽车”。一辆车不需要知道如何点灯,它只是要求前灯通过开关来做到这一点。

使用多态性,您可以将一个系统(实现)替换为另一个系统,而不会引起注意。例如,你可以用LED大灯代替你的前照灯。他们是一个完全不同的系统,但你仍然只是按相同的开关,他们来了。

因此,我想您可以说,包含在car中的灯是封装的,能够将它们切换到不同的实现,而不需要更改您使用的is多态性接口。

此外,作为一种一般性,封装通常使用相同的代码--您通常不会改变封装类在运行时是如何实现的,除非您还组合了多态性--多态是封装类在运行时更改代码/实现以及数据的方式。

票数 1
EN

Stack Overflow用户

发布于 2018-05-11 16:01:52

它们是两个截然不同的概念。任何一个都可以在没有另一个的情况下存在。

封装是指没有公开其内部实现细节的类或模块。是个黑匣子。你观察输入和输出。它是如何从输入到输出的,应该隐藏和保护它不受潜在的外部干扰。

多态,或者更确切地说是子类型,是共享常见实现细节的一种方式:字段、方法等等。因此,您可以认为这种“共享”实际上在某种程度上破坏了封装。

票数 0
EN

Stack Overflow用户

发布于 2018-05-11 16:06:43

简单地说,答案是否定的,多态不是封装。

多态是父类和子类之间的" is -a“关系的名称。

封装是两个类之间的“has”关系的名称。

现实世界的例子:多态:雷克萨斯就是汽车。封装:雷克萨斯有引擎。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50295895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档