47.抽象类中的虚函数和抽象函数

  1. 47.抽象类中的虚函数和抽象函数
    1. 47.1 题目
    2. 47.2 深入解析
      1. 示例代码
    3. 47.3 答题示例
    4. 47.4 关键词联想

47.抽象类中的虚函数和抽象函数


47.1 题目

抽象类中的虚函数和抽象函数,是否必须在子类中重写?


47.2 深入解析

在子类中:

  • 虚函数:重写是可选的。当需要在子类中修改逻辑时,可以选择重写虚函数。如果不重写,子类会继承并使用基类中的虚函数实现。

  • 抽象函数:非抽象子类必须重写。抽象函数在基类中没有实现,子类必须提供具体的实现,否则子类本身也必须被声明为抽象类。

示例代码

using System;

abstract class BaseClass
{
    // 虚函数,有默认实现
    public virtual void VirtualMethod()
    {
        Console.WriteLine("BaseClass implementation of VirtualMethod");
    }

    // 抽象函数,无实现
    public abstract void AbstractMethod();
}

class DerivedClass : BaseClass
{
    // 重写虚函数是可选的
    public override void VirtualMethod()
    {
        Console.WriteLine("DerivedClass implementation of VirtualMethod");
    }

    // 必须重写抽象函数
    public override void AbstractMethod()
    {
        Console.WriteLine("DerivedClass implementation of AbstractMethod");
    }
}

class Program
{
    static void Main()
    {
        DerivedClass obj = new DerivedClass();
        obj.VirtualMethod(); // 输出: DerivedClass implementation of VirtualMethod
        obj.AbstractMethod(); // 输出: DerivedClass implementation of AbstractMethod
    }
}

在上述示例中,VirtualMethod 是虚函数,在 DerivedClass 中重写是可选的。而 AbstractMethod 是抽象函数,必须在 DerivedClass 中实现。


47.3 答题示例

“抽象类中的虚函数和抽象函数在子类中的重写要求不同:

  • 虚函数(用virtual修饰):子类可以选择重写,也可以不重写。因为虚函数在基类中已有默认实现,若子类不重写,会直接继承基类的实现。
  • 抽象函数(用abstract修饰):子类必须重写(除非子类本身也是抽象类)。因为抽象函数在基类中没有具体实现,子类必须提供完整实现才能被实例化。”

47.4 关键词联想

  • virtual 关键字(虚函数)
  • abstract 关键字(抽象函数)
  • override 重写
  • 抽象类(abstract class
  • 非抽象子类(必须实现抽象成员)
  • 默认实现(虚函数有,抽象函数无)
  • 继承规则(抽象成员的强制性实现)
  • 抽象子类(可延迟实现抽象函数)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏