📜  使用子类与超类引用来引用子类对象(1)

📅  最后修改于: 2023-12-03 15:06:55.970000             🧑  作者: Mango

使用子类与超类引用来引用子类对象

当需要创建许多相似的对象,但每个对象有不同的行为时,可以使用继承的概念来创建一个通用的父类,然后创建不同的子类来继承这个父类,并实现子类特定的行为。

在某些情况下,我们需要在程序中使用子类与超类引用来引用子类对象,这时候就需要使用到多态的概念。

多态

多态是指同一个方法可以在不同的情况下具有不同的表现形式和含义。当一个超类引用指向一个子类对象时,就产生了多态。

例如,有一个动物类和两个子类,狗和猫。如果你想给它们都发出一个声音,你可以编写一个通用的方法,并让每个子类实现该方法以适应自己的声音。然后,可以使用父类引用调用该方法,由于每个子类都实现了该方法,所以将在每个子类中产生不同的声音。

示例代码

以下为一个使用子类与超类引用来引用子类对象的示例代码,其中定义了一个 Animal 父类和两个子类 DogCat,并在 Main 方法中使用父类引用指向子类对象,实现多态的效果:

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");
    }
}

public class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("The cat meows");
    }
}

public class MainClass
{
    public static void Main()
    {
        Animal myAnimal = new Animal();
        Animal myDog = new Dog();
        Animal myCat = new Cat();
        
        myAnimal.MakeSound();
        myDog.MakeSound();
        myCat.MakeSound();
    }
}

输出结果为:

The animal makes a sound
The dog barks
The cat meows

在上面的代码中,我们定义了一个 Animal 父类和两个子类 DogCat。在 Main 方法中,我们声明了一个父类 Animal 的引用 myAnimal 和两个子类 DogCat 的引用 myDogmyCat。然后我们调用每个对象的 MakeSound 方法,由于每个子类都重写了 Animal 父类的 MakeSound 方法,所以根据对象引用的不同,将在控制台输出不同的结果。

这就是使用子类与超类引用来引用子类对象,并实现多态的方法。