位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# OOP技术 多态性

提问人:刘团圆发布时间:2020-12-04

    继承的一个结果是派生于基类的类在方法和属性上有一定的重叠,因此,可以使用相同的语法处理从同一个基类实例化的对象。例如,如果基类Animal有一个EatFoodO方法,则在其派生类Cow和Chicken中调用这个方法的语法是类似的:

    Cow myCow = new Cow();

    Chicken myChicken = new Chicken();

    myCow.EatFood() ;

    myChicken.EatFood() ;

多态性则推进了一步。可以把某个派生类型的变量赋给基本类型的变量,例如:

    Animal myAnimal = myCow;

不需要进行强制类型转换,就可以通过这个变量调用基类的方法:

    myAnimal.EatFood();

结果是调用派生类中的EatFoodO的实现代码。注意,不能以相同的方式调用派生类上定义的方法。下面的代码无法运行:

    myAnimal .Moo();

但可以把基本类型的变量转换为派生类变量,调用派生类的方法,如下所示:

    Cow myNewCow = (Cow)myAnimal;

    myNewCow.Moo();

如果原始变量的类型不是Cbw或派生于Cbw的类型,这种强制类型转换就会引发一个异常。


    在派生于同一个类的不同对象上执行任务时,多态性是一种极有效的技巧,其使用的代码最少。注意并不是只有共享同一个父类的类才能利用多态性。只要子类和孙子类在继承层次结构中有一个相同的类,它们就可以用同样的方式利用多态性。

    还要注意,在C#中,所有类都派生于同一个类object, object是继承层次结构中的根。所以可以把所有对象看成object类的实例。这就是在建立字符串时,WriteLineO可以处理无数多种参数组合的原因。第一个参数后面的每个参数都可以看成一个object实例,所以可以把任何对象的输出结果写到屏幕上。为此,需要调用方法ToStringCXobject的一个成员)。我们可以重写这个方法,为自己的类提供合适的实现代码,或者使用默认实现代码,返回类名(根据它所在的名称空间,返回类的限定名称)。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部