虚方法和抽象方法的区别?

虚方法与抽象方法的主要区别在于它们是否有实现部分、是否必须在派生类中被重写,以及它们可以声明的类类型。虚方法提供了灵活的多态性支持,允许派生类根据需要选择是否重写基类方法;而抽象方法则是一种强制性的约定,要求派生类必须实现这些方法以确保类的完整性和一致性。

定义和特性

1.虚方法

定义:虚方法是在基类中声明,并允许在派生类中被重写的方法。它提供了在运行时根据对象的实际类型来确定调用哪个方法版本的能力,这是多态性的基础。

特性:有实现部分(方法体)。可以被子类重写,也可以不重写,取决于具体需求。

2.抽象方法

定义:抽象方法只有声明没有实现的方法,它强制要求派生类必须提供具体实现。抽象方法通常用于定义一组必须由派生类实现的行为。

特性:没有实现部分(没有方法体)。只能在抽象类中声明。派生类必须重写基类中的抽象方法。

虚方法:

public class Animal  
{  
    public virtual void MakeSound()  
    {  
        Console.WriteLine("Some sound");  
    }  
}  
  
public class Dog : Animal  
{  
    public override void MakeSound()  
    {  
        Console.WriteLine("Woof!");  
    }  
}

抽象方法:

public abstract class Animal  
{  
    public abstract void MakeSound();  
}  
  
public class Dog : Animal  
{  
    public override void MakeSound()  
    {  
        Console.WriteLine("Woof!");  
    }  
}

虚方法:适用于那些在某些情况下需要由基类提供默认实现,但同时又允许派生类根据需要进行修改或扩展的方法。

抽象方法: 适用于那些定义了一组必须由派生类实现的行为,但基类本身不提供具体实现的情况。它强制派生类必须实现这些方法,以确保类的完整性和一致性。

关键的区别:


抽象方法只能在抽象类中声明,而虚方法不是。
抽象方法必须在子类中被重写,而虚方法可以在子类中被重写,也可以不重写。
抽象方法不能有实现(花括号之间的代码),而虚方法可以有实现。

抽象方法只能在抽象类中声明

抽象方法是需要子类去实现的。 虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求。

抽象方法和虚方法都可以供派生类重写

抽象方法必须在派生类中重写

参考:

C#:虚方法与抽象方法之区别_c#虚拟方法和抽象方法的异同-CSDN博客

一文带你了解C#中抽象方法与虚方法的区别_C#教程_脚本之家 (jb51.net)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值