虚方法(Virtual Method)#
来源:
D:\study\C#1\stu0727\虚方法
虚方法定义在普通类中,允许子类通过 override 重写其行为。与抽象方法不同,虚方法有默认实现,子类可以不重写(此时使用父类的默认实现)。
基本语法#
class People
{
public string Name { get; set; }
// virtual 关键字:声明为虚方法,有默认实现
public virtual void Speak()
{
Console.WriteLine("打招呼");
}
}
class Man : People
{
// override 重写虚方法
public override void Speak()
{
Console.WriteLine("吃了没");
}
}
使用:
抽象方法 vs 虚方法#
| 对比 | 抽象方法 | 虚方法 |
|---|---|---|
| 所在类 | 只能在抽象类中 | 可以在普通类中 |
| 方法体 | ❌ 没有(必须被子类实现) | ✅ 有(子类可以不重写) |
| 子类必须实现 | ✅ 必须 override |
❌ 可选 |
| 修饰符限制 | 不能是 private |
可以是任意访问修饰符 |
共同点:抽象方法和虚方法都是实现运行时多态(动态多态)的机制——在程序运行期间才决定调用哪个版本的方法。