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