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