A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dlwcg 中级黑马   /  2014-2-20 21:23  /  1540 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

RT,抽象方法或虚方法有啥区别呢?

评分

参与人数 1技术分 +1 收起 理由
卖火柴 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
抽象方法不能有方法的实现,必须被子类重写
虚方法可以有自己的方法实现,子类可以不重写

评分

参与人数 1技术分 +2 收起 理由
电脑大牛 + 2

查看全部评分

回复 使用道具 举报
抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。
重写的子类虚函数就是被覆盖了。
回复 使用道具 举报
抽象方法   
   使用abstract关键字    public    abstract    bool    Withdraw(…);   
   抽象方法是必须被派生类覆写的方法。   
   抽象方法是可以看成是没有实现体的虚方法   
   如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法   
   
   虚方法   
   使用virtual关键字    public    virtual    bool    Withdraw(…);   
   调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。   
   虚方法可以有实现体

若一个实例方法的声明中含有        virtual        修饰符,则称该方法为虚拟方法;一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。         
            
       虚函数的限制:         
            
       1.虚函数仅适用于有继承关系的类对象,        所以只有类的成员函数才能说明为虚函数.            
       2.静态成员函数不能是虚函数.            
       3.内联函数不能是虚函数.            
       4构造函数不能是虚函数.            
       5.析构函数可以是虚函数.

简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.
回复 使用道具 举报
抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。
重写的子类虚函数就是被覆盖了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马