我在大学的教授曾经用一个很棒的轶事来描述多态性和封装。事情是这样的。
这里有人知道汽水机是如何工作的吗?(提示困惑的目光,为什么我们甚至会谈论这个。不?让我告诉你。
你放下了零钱,机器里面有一只小猴子,它会计算你所有的零钱,以确保你投入足够的钱。当你按下苏打水的按钮时,一个小灯亮了,告诉猴子你按下了哪个按钮,如果你输入了正确的零钱,他会抓住你的选择,把它扔进小洞里,让你拿起你的苏打水。
这就是封装的概念。我们隐藏了苏打水机的实现。除非它有一个花哨的,清晰的窗户让你看到里面,否则你真的不知道它是如何工作的。你所知道的是,你投入了一些现金,按下了一个按钮,如果你投入了足够的钱,你就得到了你的饮料。
除此之外,您知道如何使用汽水机的接口,因此,只要机器的接口遵循通常的汽水机接口,您就可以使用它。这称为接口协定。这台机器可以将来自南极洲的饮料放在传送带上,只要你得到你的饮料,它是冷的,你得到的零钱。
多态性是当你使用苏打水机界面时,它可以做不同的事情。这就是为什么封装和多态性密切相关的原因。在多态性中,您所知道的只是您正在使用可以更改的实现,因此,可以在幕后完成不同的事情。这导致了多态性的驱动概念,即一个对象(the)实际上既充当 a 又依赖于接口后面的机器的能力。SodaMachine
SodaMachine
MonkeySodaMachine
ConveyorSodaMachine
可能不是逐字逐句,但足够接近。从本质上讲,它归结为两个概念:多态性和封装。如果您想澄清,请告诉我。