首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时多态性的使用

运行时多态性的使用
EN

Stack Overflow用户
提问于 2011-12-28 03:13:41
回答 5查看 1.8K关注 0票数 1

我是编程新手,我想问一下运行时多态性的最终用途是什么?

示例:

代码语言:javascript
复制
class Parent
{
    //do something
}
class Child : Parent
{
    //do something
}

main()
{
    Parent p = new Child (); // run-time polymorphism
    Child q = new Child(); // no polymorphism
}

我的问题是,我们使用第一行(Parent p = new Child();)来实现运行时多态性,但我们可以使用第二行(Child q = new Child();)来代替第一行...

那么它们之间的区别是什么呢?为什么我们要使用运行时多态性?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-28 03:18:18

您提供的代码片段没有实际用途。但是想一想这个方法:

代码语言:javascript
复制
public void DoSomething( Parent parent ){ ... }

您可以这样做:

代码语言:javascript
复制
Child child = new Child();
DoSomething( child );

在本例中,对于DoSomething,它将只是一个父对象。它不关心它是否是一个子类。

希望能有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2011-12-28 03:18:55

虽然你的例子说明了为什么这是一个糟糕的例子,但想象一下如下所示:

代码语言:javascript
复制
main()
{
    Parent p = Factory("SomeCondition"); ///run-time polymorphism
}

Parent Factory(string condition)
{
    if (condition == "SomeCondition")
    {
        return new Child();
    }
    else
    {
        return new Parent();
    }      
}

当工厂被调用时,我们不知道返回类型实际上是什么,它可能是一个子类型,也可能是一个父类型。

票数 5
EN

Stack Overflow用户

发布于 2011-12-28 03:28:00

运行时多态性的最终用途是泛化。它通过允许使用公共超类的子类来促进代码重用。您不希望为来自不同类的每个对象编写单独的方法,这将变得乏味。

运行时多态性允许您编写可由许多不同子类使用的泛化代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8648325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档