虚方法的定义和使用

虚方法是在面向对象编程中的一个概念,是继承和多态性的基础,用来描述能够被子类重写(override)的方法。这使得在子类对象上调用这个方法时,实际执行的是子类中重写的方法。

虚方法的存在意味着在编译时无法确定应该调用哪个方法,而是在运行时根据对象的实际类型来确定。这种多态性的特性使得程序更加灵活和可扩展。

如何定义虚方法:

在C++中,通过在函数声明前加上virtual关键字来声明一个虚方法,在子类中可以使用override关键字来重写。

在C#和Java中,所有非静态的方法都默认是虚方法(隐式声明),也可以使用virtual关键字来显式声明虚方法(好处是增加代码的可读性和可维护性),在子类中可以使用override关键字来重写。

虚方法的定义和使用范例(C#):实现多态的过程

using System;

//定义父类Animal
class Animal
{
    //用关键词virtual声明虚方法 
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

//定义子类Dog 继承父类 Animal
class Dog : Animal
{
    //用关键词override 重写父类虚方法
    public override void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

//定义子类Cat 继承父类 Animal
class Cat : Animal
{
    //用关键词override 重写父类虚方法
    public override void MakeSound()
    {
        Console.WriteLine("Cat meows");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal animal = new Animal(); //创建Animal对象
        animal.MakeSound(); // 输出: "Animal makes a sound"

        Animal dog = new Dog(); //创建Dog对象,执行Dog类中重写的方法
        dog.MakeSound(); // 输出: "Dog barks"

        Animal cat = new Cat();  //创建Cat对象,执行Cat类中重写的方法
        cat.MakeSound(); // 输出: "Cat meows"
    }
}

 向上转型写法: Animal dog = new Dog(); 

  将一个派生类的实例(Dog对象)赋值给一个基类的变量(Animal对象),这种写法可以将多个不同的子类对象统一当作基类处理,能够更通用地处理对象,也可以方便地扩展和使用多态性的特点。

你可能感兴趣的:(C#,.net,c#,开发语言)