zoukankan      html  css  js  c++  java
  • C#中abstract与virtual的用法

    关于C#中的abstract与virtual的用法一直迷糊。于是自己动手写一写试试。

    1.第一种情况

    //抽象动物类,声明抽象方法Shout(),注意抽象方法没有方法体
    abstract class Animal
        {
            public abstract void Shout();
        }
    // 猫类,继承动物类,覆盖抽象Shout()方法
    class Cat:Animal
        {
            public Cat()
            {
            }
    
            public override void Shout()
            {
                Console.WriteLine("喵喵!");
            }
        }
    // 狗类,继承动物类,覆盖抽象Shout()方法   
     class Dog:Animal
        {
            public Dog()
            {
            }
    
            public override void Shout()
            {
                Console.WriteLine("汪汪!");
            }
        }
    // 客户程序调用
    static void Main(string[] args)
            {
                Animal cat = new Cat();
                cat.Shout();
                Animal dog = new Dog();
                dog.Shout();
                Console.ReadKey();
            }

    运行结果如下:

    image

    2.第二种情况

    如果用virtual,Animal类则修改如下,注意虚方法要有方法体。

    abstract class Animal
        {
            public virtual void Shout()
            {
                Console.WriteLine("动物叫!");
            }
        }

    运行结果依旧:

    image

    在第一种情况下,由于子类必须要实现基类的抽象方法,所以如果把Cat类的Shout()方法去掉,程序编译会报错。

    但是在第二种情况下,如果把Cat类的Shout()方法去掉,则客户端没有覆盖基类的Shout()方法,cat.Shout()会调用基类的Shou()方法。运行结果如下:

    image

  • 相关阅读:
    FastDFS
    目前存在的问题
    MongoDB JAVA开发
    [Linux] Hexo 搭建个人博客
    新目标
    1年之后的拿高工资的资本,Java线程
    Oracle在VMware虚拟机安装的配置
    adb命令关闭打开手机wifi开关
    ADB命令横竖屏切换、关闭打开wifi
    使用adb命令提取安卓手机中安装的apk
  • 原文地址:https://www.cnblogs.com/liming1019/p/1653728.html
Copyright © 2011-2022 走看看