PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > ASP.NET教程 > 正文

    C#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?1 虚方法必须有实现部分,并为派生类提供了重写该方法的选项。抽象方法没有
     

    虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?

    1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项。抽象方法没有提供实现部分,抽象方法是一种强制派生类重写的方法,否则派生类将不能被实例化。

    //抽象方法
    public abstract class Animal
    {
        
    public abstract void Sleep();
        
    public abstract void Eat();
    }


    //虚方法
    public class Animal
    {
        
    public virtual void Sleep(){}
        
    public virtual void Eat(){}
    }

    2. 抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写。虚方法不是也不必要重写。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。

    public class Animal
    {
        
    public abstract void Sleep();
        
    public abstract void Eat();
    }

    这样写编译器会报错。

    3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚拟方法不必。抽象方法不能声明方法体,而虚拟方法可以。 包含抽象方法的类不能实例化 ,而包含虚方法的类可以实例化!

    public abstract class Animal
    {
        
    public abstract void Sleep();
        
    public abstract void Eat();
    }


    public class Cat : Animal
    {
        
    public override void Sleep()
         {
             Console.WriteLine( 
    "Cat is sleepingC#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别 " );
         }
        
    // we need implement Animal.Eat() hereC#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别
    }

    编译器会报错,因为我们没有实现抽象类中所有抽象方法。

    虚拟方法和抽象方法有什么区别与联系:

    1、抽象方法只有声明没有实现代码,需要在子类中实现;虚拟方法有声明和实现代码,并且可以在子类中重写,也可以不重写使用父类的默认实现。

    2、抽象类不能被实例化(不可以new),只能实例化实现了全部抽象方法的派生类;而包含虚方法的类可以实例化。

    3、虚方法与多态性关系密切,虚方法允许派生类完全或部分重写该类的方法,需写方法体。抽象方法只是一个定义,没有方法体,也就是没有{},也不要在里面写内容。

    4、抽象方法是虚拟方法两个相像的一点是都用override重写。


    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-11-117-1.html
    相关热词搜索: C 类 接口 抽象