• C# 学习笔记 多态(二)抽象类


      多态是类的三大特性之一,抽象类又是多态的实现方法之一。抽象类是什么呢,如果把虚方法比作一个盛有纯净水的杯子,那么此时的“纯净水”就是事先定义好的方法,我们可以根据不同的需求来改变杯子中所事先盛放的是“纯净水”还是“咖啡”。但是抽象类呢,他更像是一个空的杯子,放在消毒柜中,让有需要的人自己去拿,去决定这个杯子里装什么。这个“杯子”是抽象方法,存放杯子的“消毒柜”是抽象类。

      我们用abstract来声明或定义一个抽象类或抽象方法,

    //定义一个抽象类
    [访问权限] abstract class [类名]
    {
        
    }
    
    //定义一个抽象方法
    [访问权限] abstract [返回类型] [方法名]([参数表]);

      这里需要注意的是:

        抽象类中可以有抽象方法,也可以没有抽象方法。(“消毒柜”可以存放杯子,也可以存放碗筷)

        抽象方法必须存在于抽象类中,并且这个方法不可拥有方法体。(首先杯子需要放在一个干净可以消毒的地方,其次这个杯子是没有被用过的,不然恐怕没有客人想用这个杯子做什么。。)

        抽象类无法实例化,只能被继承于他的派生类实例化,也就是说抽象类的存在就是为了被继承。

        抽象类中的抽象成员只能在其派生类中使用override关键字进行实现。

      抽象类和抽象方法的使用:

    //定义一个柜子,柜子里有杯子(此时无法进行实例化)
    abstract class Cabinet
    {
        public abstract void Cup();
    }
    
    
    
    //第一类顾客喜欢喝牛奶
    class Customer1:Cabinet
    {
        public override void Cup()
        {
            Console.WriteLine("牛奶");
        }
    }
    
    
    
    //第二类顾客喜欢喝汽水
    class Customer2:Cabinet
    {
        public override void Cup()
        {
            Console.WriteLine("汽水");
        }
    }

       将派生类实例化并且进行结果验证:

    Cabinet a = new Cabinet();  //会引起不能实例化抽象类的错误
    
    Customer1 a = new Customer1();
    a.Cup();
    
    输出结果:
    牛奶
    
    Customer2 b = new Customer2();
    b.Cup();
    
    输出结果:
    汽水

      这是我理解的抽象类,新手上路,有不对的地方还请各位老司机指出,对自己的收获进行一定的总结,如果能帮到和我一样的新手就再好不过了。晚安世界!

  • 相关阅读:
    Linux 在当前文件夹下查找某文件
    Linux 计算文件夹下内容大小【包含软链接的文件】
    《什么是生物信息学》摘录
    二分查找算法
    python之递归函数
    python之内置函数、匿名函数
    python之迭代器,生成器
    Python之文件操作
    基础数据类型的整理
    Python数据可视化—折线图
  • 原文地址:https://www.cnblogs.com/wangxiao666/p/11846331.html
Copyright © 2020-2023  润新知