在C#中,继承和多态是面向对象编程的两个核心概念。以下是一个简单的示例,展示了如何在C#中使用继承和多态。
首先,我们定义一个基类`Animal`,然后创建两个派生类`Dog`和`Cat`,它们继承自`Animal`类。接着,我们通过多态性来演示如何调用基类和派生类的方法。
using System;
// 基类
class Animal
{
public virtual void Speak()
{
Console.WriteLine("This animal makes a sound.");
}
}
// Dog类继承自Animal类
class Dog : Animal
{
// 重写基类中的方法
public override void Speak()
{
Console.WriteLine("Woof!");
}
}
// Cat类继承自Animal类
class Cat : Animal
{
// 重写基类中的方法
public override void Speak()
{
Console.WriteLine("Meow!");
}
}
class Program
{
static void Main(string[] args)
{
// 创建Animal类型的变量,但实际指向Dog和Cat的实例
Animal myDog = new Dog();
Animal myCat = new Cat();
// 调用Speak方法,展示多态性
myDog.Speak(); // 输出: Woof!
myCat.Speak(); // 输出: Meow!
// 由于myDog和myCat在编译时类型都是Animal,但运行时类型是Dog和Cat,
// 因此调用的是各自类中重写后的Speak方法,这体现了多态性。
}
}
在这个例子中,`Animal`类定义了一个虚方法`Speak()`,它在基类中的实现仅打印了一条通用的消息。然后,`Dog`和`Cat`类分别重写了这个方法,以打印出各自的叫声。在`Main`方法中,我们创建了`Dog`和`Cat`的实例,但将它们赋给了`Animal`类型的变量。当调用这些变量的`Speak()`方法时,根据对象的实际类型(即运行时类型),将调用相应类中的`Speak()`方法,这体现了多态性的特性。