当前位置:  开发笔记 > 编程语言 > 正文

尝试尽可能简单地描述多态性

如何解决《尝试尽可能简单地描述多态性》经验,为你挑选了7个好方法。

如何以易于理解的方式描述多态?

我们可以在Internet和书籍上找到关于该主题的大量信息,例如Type polymorphism.但是,让我们尽可能地让它变得简单.



1> Steven A. Lo..:

两个对象以不同的行为响应同一个消息; 发件人不必在意.



2> David Frenke..:

带有简单弹出盖的每个罐子都以同样的方式打开.
作为一个人,你知道你可以打开()任何你能找到的.

打开时,并非所有罐头的行为都相同.
有些含有坚果,有些含有假蛇.
结果取决于罐的类型,如果罐是"CanOfNuts"或"CanOfSnakes",但这与你如何打开它无关.你只知道你可以打开任何Can,并且会得到某种结果,这些结果是根据你打开的Can的类型决定的.

pUnlabledCan->打开(); //可能会给坚果,可能会给蛇.直到我们称之为止,我们才知道

Open()具有泛型返回类型"Contents"(或者我们可能决定没有返回类型),因此open始终具有相同的函数签名.

你,人,是用户/来电者.
Open()是虚拟/多态函数.
"Can"是抽象基类.
CanOfNuts和CanOfSnakes是"Can"类的多态子.
每个Can都可以被打开,但具体它什么以及它返回的具体内容是由什么样的能量来定义的.
当你看到pUnlabledCan时你所知道的就是你可以Open()它,它将返回内容.任何其他行为(例如在你脸上弹出蛇)都是由特定的Can决定的.



3> Mark A. Nico..:

这是我的答案来自一个类似的问题.这是伪C#/ Java中的多态性示例:

class Animal
{
    abstract string MakeNoise ();
}

class Cat : Animal {
    string MakeNoise () {
        return "Meow";
    }
}

class Dog : Animal {
    string MakeNoise () {
        return "Bark";
    }
}

Main () {
   Animal animal = Zoo.GetAnimal ();
   Console.WriteLine (animal.MakeNoise ());
}

Main()方法不知道动物的类型,并且取决于MakeNoise()方法的特定实现的行为.


一个例子不是描述:P

4> Greg Beech..:

对多态性的最简单描述是它是一种减少if/switch语句的方法.

它还具有允许您扩展if/switch语句(或其他人的语句)而无需修改现有类的好处.

例如,考虑Stream.NET中的类.没有多态性,它将是一个单独的大型类,其中每个方法实现一个如下的switch语句:

public class Stream
{
    public int Read(byte[] buffer, int offset, int count)
    {
        if (this.mode == "file")
        {
            // behave like a file stream
        }
        else if (this.mode == "network")
        {
            // behave like a network stream
        }
        else // etc.
    }
}

相反,我们允许运行时以更有效的方式为我们进行切换,方法是根据具体类型(FileStream,NetworkStream)自动选择实现,例如

public class FileStream : Stream
{
    public override int Read(byte[] buffer, int offset, int count)
    {
        // behave like a file stream
    }
}

public class NetworkStream : Stream
{
    public override int Read(byte[] buffer, int offset, int count)
    {
        // behave like a network stream
    }
}


我喜欢这个解释,因为它描述了多态如何实际有用.

5> Cyber Olivei..:

聚:许多
态射:形态/形状



6> Ovidiu Pacur..:

演员与角色(或角色)



7> angry person..:

苹果和橘子都是水果.水果可以吃.因此,苹果和橘子都可以吃.

踢球者?你吃不同的东西!剥橙子,但不剥苹果.

所以实施方式不同,但最终结果是一样的,你吃水果.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有