Oop 多态性-用两句话来定义

Oop 多态性-用两句话来定义,oop,polymorphism,terminology,Oop,Polymorphism,Terminology,我看过其他的定义和解释,但没有一个能让我满意。我想看看是否有人能在不使用任何代码或示例的情况下用最多两句话来定义多态性。我不想听到“所以你有一个人/汽车/开罐器…”或者这个词是如何派生出来的(没有人会因为你知道poly和morph的意思而印象深刻)。如果你很好地理解了多态性是什么,并且精通英语,那么你应该能够用一个简短但密集的定义来回答这个问题。如果您的定义准确地定义了多态性,但是非常密集,需要进行多次读取,那么这正是我要寻找的 为什么只有两句话?因为一个定义既短又聪明。解释很长,包含示例和代码

我看过其他的定义和解释,但没有一个能让我满意。我想看看是否有人能在不使用任何代码或示例的情况下用最多两句话来定义多态性。我不想听到“所以你有一个人/汽车/开罐器…”或者这个词是如何派生出来的(没有人会因为你知道poly和morph的意思而印象深刻)。如果你很好地理解了多态性是什么,并且精通英语,那么你应该能够用一个简短但密集的定义来回答这个问题。如果您的定义准确地定义了多态性,但是非常密集,需要进行多次读取,那么这正是我要寻找的

为什么只有两句话?因为一个定义既短又聪明。解释很长,包含示例和代码。请看这里的解释(这些页面上的答案对我的问题不满意):


我为什么要问这个问题?因为有人问我同样的问题,我发现我无法给出一个令人满意的定义(以我的标准,这是相当高的)。我想看看这个网站上有没有伟大的人物能做到这一点


如果你真的不能满足两句话的要求(这是一个很难定义的主题),那么你再看一遍就可以了。这个想法是要有一个定义,它实际上定义了什么是多态性,而不是解释多态性的作用或使用方法(有什么区别吗?)

一般来说,水果可以吃,但不同类型的水果吃的方式不同。苹果是水果,可以吃(因为它是水果)。香蕉也可以食用(因为它也是一种水果),但食用方式与苹果不同。你先剥皮

嗯,至少我知道,但我在某些方面很奇怪,所以我知道什么

这说明了遗传(水果可以吃)、多态性(吃水果的东西可以吃所有类型的水果)和封装(香蕉有皮)


严肃地说,对象继承、多态性、封装、虚拟事物、抽象事物、私有事物、公共事物,这些都是硬概念。如果有人想对这个问题有一个两句话的定义,那么请将这个问题标记为代码高尔夫变体,因为两个这样的句子必须非常简洁,除非你已经知道它是什么,否则你就不会对它有足够的了解来了解你需要了解更多的东西。

多态性是一种面向对象的策略,用于设计对象模型,以帮助简化代码。多态性的核心是能够定义两个相似但不同的对象,然后将这两个对象视为相同的对象


好吧,这很难……

多态性是声明一个不知道类型的统一接口,将实现细节留给实现该接口的具体类型。

Wikipedia:多态性是一种编程语言功能,允许使用统一接口处理不同数据类型的值。对我来说非常简单。

多态性允许某种契约的表达,可能有许多类型(无论是否通过类继承)以不同的方式实现该契约,每个类型都根据自己的目的。使用该契约的代码不必(*)关心涉及哪个实现,只需遵守契约即可


(*)无论如何,在理想的情况下-显然,调用代码经常非常有意地选择适当的实现

为不同类型上的一组类似操作指定一个名称。如果做得好,这种类比是显而易见的,例如,通过算术“加法”数字和通过串联“加法”字符串(将其长度相加)。

单个对象的多种形式称为多态性。

实际上,多态性有多种形式,对此存在相当多的争议;你甚至可以看到CS教授不能正确定义它。我知道有三种类型:

  • 特殊多态性(看起来像鸭子,走路像鸭子=>是鸭子)。例如,可以在Haskell和Python中看到

  • 泛型多态性(其中类型是某个泛型类型的实例)。例如,C++中可以看到(int的向量和字符串的向量都具有成员函数大小)。

  • 子类型多态性(其中一个类型从另一个类型继承)。可以在大多数OO编程语言中看到(即三角形是一种形状)


多态性是一种软件编码抽象,其中几个不同的底层实体(通常是数据,但不总是)都共享一个公共接口,允许它们在运行时看起来和行为完全相同。我们将此作为一种开发技术,以绝对最小的实现在大量类似但不完全相同的实例上强制执行一致的行为,从而减少对bug和不一致的预期


保罗

多态性

不同的对象可以以不同的方式响应相同的消息,使对象能够在不知道其确切类型的情况下彼此交互

通过:

多态性==多个类+相同方法签名+类特定行为。

定义

多态性是一个10美元的词,代表一个1美元的想法——当我要求做某事时,只要最终结果合适,我不在乎它是如何实现的。只要服务提供正确,我不关心实现

讨论

虽然多态性通常用于软件开发,特别是在遵循面向对象原则开发的系统中,但它基本上是一种现实世界的原则,应该用现实世界的术语来定义,而不是用技术术语

例子

当我想打电话时,我拿起电话,拨一个号码,然后和另一端的人交谈。我不在乎我是谁
List list = new List();
IList list = new List();
public String format(int a) {
    return String.format("%2d", a);
}

public String format(Date a) {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(a);
}
1. Compile-time (static) polymorphism or (ad hoc) polymorphism.
2.  Run time or (dynamic) polymorphism.
 1. Parametric polymorphism or simply the use of generics (templates in C++).

 2. Inheritance-based polymorphism or subtyping.

 3. Interface-based polymorphism.
interface Imobile
{
    void Move();
}

class Person :Imobile
{
    public void Move() { Console.WriteLine("I am a person and am moving in my way."); }
}

class Bird :Imobile
{
    public void Move() { Console.WriteLine("I am a bird and am moving in my way."); }
}

class Car :Imobile
{
    public void Move() { Console.WriteLine("I am a car and am moving in my way."); }
}


class Program
{

    static void Main(string[] args)
    {
        // Preparing a list of objects
        List<Imobile> mobileList = new List<Imobile>();

        mobileList.Add(new Person());
        mobileList.Add(new Bird());
        mobileList.Add(new Car());

        foreach (Imobile mobile in mobileList)
        {
            mobile.Move();
        }

        // Keep the console open
        Console.WriteLine("Press any key to exit the program:");
        Console.ReadKey();
    }
}
 I am a person and am moving in my way.
 I am a bird and am moving in my way.
 I am a car and am moving in my way.
 Press any key to exit the program: