虚方法与抽象方法的区别

   随着学习的深入了解的也是越来越多,之前学习VB的时候可能级别太低,什么虚方法,抽象方法根本就没听过。只知道有一个“方法”,那今天就让我们说说虚方法,抽象方法的到底是何方神圣以及它们之间的区别。

虚方法:

1、虚方法有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。重写的子类虚函数就是被覆盖了。
2、使用virtual关键字 public virtual .....;
3、调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法;
4、在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。

public class Animal 
{      public virtual void Sleep(){}     
        public virtual void Eat(){} 
 }

抽象方法:

1、抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写。
2、使用abstract关键字 public abstract bool Withdraw(…);
3、如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法
public abstract class Animal 
 {      public abstract void Sleep();     
         public abstract void Eat();  
 } 

区别:

    简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求. 
虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?
1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。
2. 抽象方法只能在抽象类中声明,虚方法不是。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。
3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。
【总结】
   在学习的过程中,关于虚方法和抽象方法的仍然还有很多东西要去注意,像使用环境,代码的编写等等他们之间也存在异同,在练习的时候就需要我们去注意一下,实践很重要,在学习过程中要多练习,尽量把讲到的例子自己动手敲一下,这样才能加深我们对知识的理解。

你可能感兴趣的:(C#学习)