[英]Use of run-time polymorphism
我是编程新手,请问运行时多态性的最终用途是什么?
例:
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();
)代替第一行。
那么两者之间有什么区别? 为什么要使用运行时多态性?
虽然您的示例说明了为什么这是一个糟糕的示例,但您可以看到以下内容:
main()
{
Parent p = Factory("SomeCondition"); ///run-time polymorphism
}
Parent Factory(string condition)
{
if (condition == "SomeCondition")
{
return new Child();
}
else
{
return new Parent();
}
}
当工厂被调用时,我们不知道实际的返回类型是什么,可能是孩子,也可能是父母。
您提供的代码段没有实际用途。 但是考虑一下这种方法:
public void DoSomething( Parent parent ){ ... }
你可以这样做:
Child child = new Child();
DoSomething( child );
在这种情况下,对于DoSomething来说,它只是父级。 不在乎它是否是子类。
希望能帮助到你。
运行时多态性的最终用途是泛化。 它通过允许使用公共超类的子类来促进代码重用。 您不想为来自不同类的每个对象编写单独的方法,这会很麻烦。
运行时多态性使您可以编写可被许多不同子类使用的通用代码。
一个更好的简单示例将是这样的。 每只动物可能会吃不同的食物,并且在喂养方式上有不同的逻辑,但是您要提取“方式”,并且只在乎该方法遵循期望的规则。
我个人认为接口是查看多态性有用性的好方法。 看看那些。
class Pet
class Cat : Pet
class Persian : Cat
class Dog : Pet
class Chiwawa : Dog
main{
Pet myPet = new Persian();
if(myPet.IsHungry())
myPet.feed();
myPet = new Chiwawa()
if(myPet.IsHungry())
myPet.Feed()
}
正如您所显示的,此操作的主要用途不是实例化,而是用于使用单个代码集处理从一个共同祖先继承的所有对象。
这种用法的示例包括将对象作为参数传递给方法,或遍历不同类型的对象的集合并对所有对象执行相同的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.