我读到了关于多态性和接口但有点难以立即捕获它们。我想要一些实际的例子来实现它们。
如果它的vb.net或php会更好,因为我习惯于对它们进行编码。
答案 0 :(得分:1)
接口和多态并非特定于任何语言,而是用于对问题和解决方案空间进行建模的概念。所有面向对象的语言都提供了一种实现或实现与这些概念紧密匹配的代码的方法。
在看他们之前是什么?让我们简单地看看你需要它们的原因?以及它们如何有用。
接口的简单示例是“Car”始终具有相同的接口Break,Accelerate,一旦您知道如何驾驶它就可以驾驶任何车辆。因此,如果一个人(解决方案)获得汽车的这种统一界面而不管他能驾驶的品牌和型号,那么这就是为什么你几乎可以驾驶汽车的原因。当您编写代码来解决一个特定类别的问题时,您可以针对提供类似界面的多个域或对象重用该解决方案。
多态性的简单例子,看一个账户(它可能是检查或保存,假设每个吸引不同的股息)你走进银行并询问出纳员我的余额是多少?或分红?你不需要指定你所拥有的帐户,他将在内部找出他的书籍并为你提供详细信息。每个案例(检查和储蓄)都会隐藏出柜员如何工作的内部细节,任何人都可以走进去询问问题并获得适合相关人员的答案。因此,出纳员是多态的(他正在改变他的工作规则或形式)以适应客户。
汽车示例中的接口提供了一个使用对象的契约,只要您遵守该契约,只要有问题的接口相同,就可以将一组解决方案应用于另一个域。 Interfaces promote reuse of solutions by making them generic.
只要你有信用卡就可以喝啤酒,你不需要为每种信用卡设置特殊的酒吧。
如Teller Account示例中的多态性Promote reuse of interface or messages by reusing same message or interface to provide different but semantically equivalent mechanisms
。无论目的地号码是固定电话还是手机或其他东西,您都可以拿起电话并拨打电话号码,这里拨打10位数字的接口将在每个语义相同的机制中重复使用。
现在你可以继续查看VB.NET或PHP中的一些界面,我不太了解这些语言
看看控件(VB.NET)对类似方法做出反应的方式,以查看操作中的多态性。对于接口查找实现IEnumerable(来自上面的答案),ISerializable和实现它们的对象的对象。
答案 1 :(得分:0)
嗯,如果你曾经使用For Each
循环,那么你已经使用过接口了。编译器知道IEnumerable(Of T)
接口,因此可以通过调用GetEnumerator()
来获取IEnumerator(Of T)
来迭代任何序列,然后调用MoveNext()
}和Current
重复读取序列的元素。无论您是在List(Of T)
,LinkedList(Of T)
,HashSet(Of T)
还是其他任何内容进行迭代,这都会有效。您可以只依赖于界面。 LINQ to Objects也基于此(尽管对其他接口类型进行了一些特定的优化)。
对于多态性,我通常使用Stream
作为示例。编写使用任何Stream
的代码很容易,而不关心它实际上是FileStream
,NetworkStream
,MemoryStream
还是别的。流实现将覆盖适当的成员,使其“正常工作”。