黑马程序员技术交流社区

标题: 虚方法和抽象方法 [打印本页]

作者: 李宗鹏    时间: 2012-4-20 16:01
标题: 虚方法和抽象方法
虚方法和抽象方法理解啊?怎么区分啊?弄混了!
作者: 过客    时间: 2012-4-20 16:18
抽象方法的关键字用abstract,抽象方法没有方法体,派生类里必须重写基类的抽象方法。
虚方法的关键字用virtual,虚方法必须有方法体,派生类里可以不重写基类的虚方法,当然也可以重写,但要在方法名前面加上override。
作者: 丁官林    时间: 2012-4-20 18:00
抽象方法:  
使用abstract关键字      
   抽象方法是必须被派生类覆写的方法。   
   抽象方法是可以看成是没有实现体的虚方法   
   如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法   
   
   虚方法 :
   使用virtual关键字   
   调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。   
   虚方法可以有实现体


简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.   
   举个例子你就明白了:   

namespace ConsoleApplication1
{
    //----------------定义一个抽象类--------------
    public abstract class AUser   
   {   
           public abstract UserInfo getUser();   //抽象方法
           public virtual void  Save(UserInfo info)   //虚方法
           {   
                   //实现保存的功能   
           }   
   }   
    //------------定义一个类User1,继承类AUser,实现抽象方法-----------
   public class User1:AUser   
   {   
           public override UserInfo getUser()   
           {   
                     //一定要实现的,抽象类只给了抽象方法   
           }   
           //虚方法可以不实现
   }   
    //----------------------定义一个类User2,继承AUser,实现抽象方法,覆盖须方法------------------------
   public class User2:AUser   
   {
       public override UserInfo getUser()   
           {   
                     //一定要实现的,抽象类只给了抽象方法   
           }   
           public    override    void    Save(UserInfo    info)   
           {   
                     //覆盖抽象类中的Save方法   
           }   
   }   
}

作者: 忘忧草    时间: 2012-4-20 22:03
抽象方法   
   使用abstract关键字    public    abstract    bool    Withdraw(…);   
   抽象方法是必须被派生类覆写的方法。   
   抽象方法是可以看成是没有实现体的虚方法   
   如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法   
   
   虚方法   
   使用virtual关键字    public    virtual    bool    Withdraw(…);   
   调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。   
   虚方法可以有实现体






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2