C#中虚函数和抽象函数的区别

Wesley13
• 阅读 740

抽象方法:

使用abstract关键字 例如:public abstract bool Withdraw(…);

抽象方法是必须被派生类覆写的方法。

抽象方法是可以看成是没有实现体的虚方法,如果类中包含抽象方法,那么类就必须定义为抽象类。

不论是否还包含其它一般方法。

虚方法:

使用virtual关键字 public virtual bool Withdraw(…);

调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。

虚方法可以有实现体若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚拟方法;

一个虚拟方法的实现可以由派生类取代。

取代所继承的虚拟方法的实现的过程称为重写该方法;

在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。

虚函数的限制:

1.虚函数仅适用于有继承关系的类对象, 所以只有类的成员函数才能说明为虚函数

2.静态成员函数不能是虚函数

3.内联函数不能是虚函数

4构造函数不能是虚函数

5.析构函数可以是虚函数

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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java 设计模式之模板模式
什么是模板模式模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。模板方法模式的结构抽象类(AbstractClass):
Wesley13 Wesley13
3年前
java 07 接口
1.interface    接口2.接口中的成员修饰符固定  publicstaticfianl  //成员变量  只通过类访问   publicabstract    //成员函数   3.接口里所有的方法都是抽象的,抽象类中,可以没有抽象方法。  类与类继承,类与接口是实现的关系。降低耦合(高
Aidan075 Aidan075
3年前
Dart中的抽象类、多态、以及接口
一、Dart中的抽象类Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。  1、抽象类通过abstract 关键字来定义  2、Dart中的抽象方法不能用abstract声明
Stella981 Stella981
3年前
C++primer学习笔记(六)
1.virtual函数是基类希望派生类重新定义的函数,希望派生类继承的函数不能为虚函数。根类一般要定义虚析构函数。2.派生类只能通过派生类对象访问protected成员,不能用基类对象访问。基类定义为virtual就一直为虚函数,派生类写不写virtual都是虚函数。用做基类的类必须是已定义的。3.存在虚函数指针或引用
Wesley13 Wesley13
3年前
Java面试基础篇——第八篇:抽象类与接口的区别
1.抽象类抽象类:如果一个类中包含有抽象方法,或这个类使用abstract关键字修饰,则称这个类是抽象类。抽象方法是什么呢?抽象方法就是指用abstract关键字修饰的方法。需要注意的是:抽象类不一定必须包含抽象方法,而如果一个类中有抽象方法,这个类必须是抽象类。packagecom.developlee.abstractI
Wesley13 Wesley13
3年前
JAVA抽象类和抽象方法(abstract)
一、抽象(abstract)的使用  当父类的某些方法不确定时,可以用abstract关键字来修饰该方法\抽象方法\,用abstract来修饰该类\抽象类\。  我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化
Stella981 Stella981
3年前
C++virtual的工作原理
在C中要想正确的重写方法,就必须使用virtula关键字,用来声明方法为虚的如果不声明为虚方法就会出现一些微妙的错误.例如:classSuper{public:voidgo(){cout<<"supergo"<<endl;}}classSub:cla
Wesley13 Wesley13
3年前
OCJP做完题后的一些总结。
1\.抽象类中不一定非得有抽象方法,就算没有抽象方法,编译也不会出错。2、interface继承interface用extends关键字。3、在泛型中E实现一个接口用extends关键字。4、枚举类型也可以作为HashMap中的key使用5、枚举类型也会被编译成class文件。命名格式和内部类相同。也可以被其他类调用,但
Wesley13 Wesley13
3年前
Java 设计模式系列(十三)模板方法
Java设计模式系列(十三)模板方法模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。一、模板方法的结构
小万哥 小万哥
9个月前
Java 枚举(Enums)解析:提高代码可读性与易维护性
接口在Java中,实现抽象的另一种方式是使用接口。接口定义接口是一个完全抽象的类,用于将具有空方法体的相关方法分组:java//接口interfaceAnimalpublicvoidanimalSound();//接口方法(没有具体实现体)publicvo