C#详细举例阐述什么是多态性?
参考答案:
多态性(Polymorphism)是面向对象编程的四大基本特性之一,它允许使用父类类型的变量引用子类对象。当父类引用指向子类对象时,子类对象可以表现出自己的行为,这使得同一个引用在不同情境下有多种形态。在C#中,多态性主要通过方法重写(Override)和虚方法(Virtual Methods)来实现。
1. 方法重写(Override)
当子类继承自父类,并且子类想要改变父类中某个方法的行为时,子类可以重写这个方法。这样,当使用父类类型的变量引用子类对象并调用该方法时,实际上执行的是子类重写后的方法。
1、示例:
using System;
public class Animal
{
public void MakeSound()
{
Console.WriteLine("The animal makes a sound");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("The dog barks");
}
}
public class Program
{
public static void Main()
{
Animal animal = new Animal();
animal.MakeSound(); // 输出 "The animal makes a sound"
Animal dog = new Dog(); // 父类引用指向子类对象
dog.MakeSound(); // 输出 "The dog barks",多态性体现
}
}
在上面的示例中,Animal
类有一个 MakeSound
方法,而 Dog
类重写了这个方法。在 Main
方法中,我们创建了一个 Animal
类型的引用 dog
,但实际上它指向的是一个 Dog
对象。当我们调用 dog.MakeSound()
时,输出的是 "The dog barks",而不是 "The animal makes a sound"。这就是多态性的体现。
2. 虚方法(Virtual Methods)
在C#中,如果要让子类能够重写父类的方法,父类中的方法必须是虚方法(使用 virtual
关键字)。这样,子类就可以使用 override
关键字来重写这个方法。
2、示例:
using System;
public class Animal
{
public virtual void MakeSound() // 虚方法
{
Console.WriteLine("The animal makes a sound");
}
}
public class Dog : Animal
{
public override void MakeSound() // 重写虚方法
{
Console.WriteLine("The dog barks");
}
}
// Main 方法与之前的示例相同
在这个示例中,Animal
类中的 MakeSound
方法被声明为虚方法。这样,Dog
类就可以重写这个方法了。其他部分与之前的示例相同,输出结果也相同。
多态性的好处
多态性允许我们编写更加灵活和可维护的代码。通过多态性,我们可以使用统一的接口来处理不同类型的对象,而不必关心它们的具体类型。这使得代码更加易于扩展和修改。例如,我们可以轻松地添加新的子类并重写虚方法,而不需要修改现有的代码。
学习笔记