什么是多态,什么是它,以及它是如何使用的?

我正在观看Google Tech Talks视频,他们经常提到多态。

什么是多态,什么是它,以及它是如何使用的?


如果你考虑这个词的希腊词根,它应该变得很明显。

  • Poly =许多:多边形=多边形,聚苯乙烯=许多苯乙烯(a),polyglot =多种语言,等等。
  • Morph =变化或形式:形态=生物形式的研究,Morpheus =梦想中的希腊之神能够采取任何形式。
  • 所以多态性是(编程中)为不同的底层表单(数据类型)呈现相同接口的能力。

    例如,在许多语言中,整数和浮点数是隐式多态的,因为您可以进行加,减,乘等操作,而不管类型是否不同。 它们很少被视为通常术语中的对象。

    但是,以同样的方式,像BigDecimalRationalImaginary这样的类也可以提供这些操作,即使它们使用不同的数据类型。

    经典的例子是Shape类和所有可以继承它的类(正方形,圆形,十二面体,不规则多边形,splat等)。

    通过多态性,这些类中的每一个都将具有不同的基础数据。 点形状只需要两个坐标(当然,假设它在二维空间中)。 一个圆需要一个中心和半径。 正方形或矩形需要两个坐标,用于左上角和右下角以及(可能)旋转。 不规则的多边形需要一系列线条。

    通过让这个类负责它的代码以及它的数据,你可以实现多态。 在这个例子中,每个类都有自己的Draw()函数,客户端代码可以简单地做到:

    shape.Draw()
    

    为任何形状获得正确的行为。

    这与将代码与数据分开的旧做法形成对比,并且您将拥有诸如drawSquare()drawCircle()函数。

    面向对象,多态和继承都是紧密相关的概念,它们对知道至关重要。 在我漫长的职业生涯中有很多“银弹”,基本上只是失败了,但OO模式已经变成了一个很好的例子。 了解它,了解它,喜欢它 - 你会很高兴你做到了:-)


    (a)我原本写这个笑话,结果证明是正确的,因此并不那么有趣。 单体苯乙烯恰好由碳和氢C8H8制成,而聚苯乙烯则由(C8H8)n

    也许我应该说一个息肉是p字母的很多次出现,尽管现在我不得不解释这个笑话,即使这个看起来也不好笑。

    有时候,你应该放弃,而你在后面:-)


    多态性是指可以将某个对象视为某种通用版本的对象,但是当您访问该对象时,代码会确定它的确切类型并调用相关的代码。

    这里是C#中的一个例子。 在控制台应用程序中创建四个类:

    public abstract class Vehicle
    {
        public abstract int Wheels;
    }
    
    public class Bicycle : Vehicle
    {
        public override int Wheels()
        {
            return 2;
        }
    }
    
    public class Car : Vehicle
    {
        public override int Wheels()
        {
            return 4;
        }
    }
    
    public class Truck : Vehicle
    {
        public override int Wheels()
        {
            return 18;
        }
    }
    

    现在在控制台应用程序的模块的Main()中创建以下内容:

    public void Main()
    {
        List<Vehicle> vehicles = new List<Vehicle>();
    
        vehicles.Add(new Bicycle());
        vehicles.Add(new Car());
        vehicles.Add(new Truck());
    
        foreach (Vehicle v in vehicles)
        {
            Console.WriteLine(
                string.Format("A {0} has {1} wheels.",
                    v.GetType().Name, v.Wheels));
        }
    }
    

    在这个例子中,我们创建一个基类Vehicle的列表,它不知道每个子类有多少个车轮,但是知道每个子类负责知道它有多少个车轮。

    然后,我们在列表中添加一辆自行车,汽车和卡车。

    接下来,我们可以遍历列表中的每个车辆,并将它们全部相同地处理,但是当我们访问每个车辆车轮的属性时,Vehicle类将该代码的执行委托给相关的子类。

    这段代码被认为是多态的,因为被执行的确切代码是由在运行时被引用的子类决定的。

    我希望这可以帮助你。


    从理解和应用PHP中的多态性,谢谢Steve Guidetti。

    多态性对于一个非常简单的概念来说是一个长长的词汇。

    多态性描述了面向对象编程中的一种模式,其中类在共享通用接口时具有不同的功能。

    多态的美妙之处在于,使用不同类的代码不需要知道它使用的是哪个类,因为它们都以相同的方式使用。 一个真实世界的多态性类比是一个按钮。 每个人都知道如何使用按钮:您只需施加压力即可。 然而,按钮“做了什么”取决于它所连接的内容以及它使用的上下文 - 但结果并不影响它的使用方式。 如果你的老板告诉你按下一个按钮,你已经拥有完成任务所需的所有信息。

    在编程世界中,多态性用于使应用程序更加模块化和可扩展。 您可以根据需要创建可互换的对象,而不是描述不同行为过程的混乱条件语句。 这是多态的基本目标。

    链接地址: http://www.djcxy.com/p/43081.html

    上一篇: What is polymorphism, what is it for, and how is it used?

    下一篇: Turning a Dict into a constraint