抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,而且在子类中必须重写;虚方法则有本身的函数体,已经提供了函数实现,可是容许在子类中重写或覆盖。
重写的子类虚函数就是被覆盖了。函数
抽象方法 spa
使用abstract关键字 public abstract bool Withdraw(…);对象
抽象方法是必须被派生类覆写的方法。继承
抽象方法是能够当作是没有实现体的虚方法接口
若是类中包含抽象方法,那么类就必须定义为抽象类,不管是否还包含其它通常方法it
虚方法 构造函数
使用virtual关键字 public virtual bool Withdraw(…);方法
调用虚方法,运行时将肯定调用对象是什么类的实例,并调用适当的覆写的方法。vi
虚方法能够有实现体 若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚拟方法;实例化
一个虚拟方法的实现能够由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型肯定了要被调用的到底是该方法的哪个实现。
虚函数的限制:
1.虚函数仅适用于有继承关系的类对象, 因此只有类的成员函数才能说明为虚函数.
2.静态成员函数不能是虚函数.
3.内联函数不能是虚函数.
4构造函数不能是虚函数.
5.析构函数能够是虚函数. 简单点说,抽象方法是须要子类去实现的.虚方法,是已经实现了,子类能够去覆盖,也能够不覆盖取决于需求.
简单点说,抽象方法是须要子类去实现的.虚方法,是已经实现了,子类能够去覆盖,也能够不覆盖取决于需求.
虚方法和抽象方法均可以供派生类重写,它们之间有什么区别呢?
1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,不然派生类将不能被实例化。
2. 抽象方法只能在抽象类中声明,虚方法不是。其实若是类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。
3. 抽象方法必须在派生类中重写,这一点跟接口相似,虚方法没必要。