当前位置: 首页 > article >正文

C#和数据库高级:抽象类和抽象方法

文章目录

  • 一、为什么使用抽象类和抽象方法?
    • 1.1、父类与子类的相互转换
  • 二、抽象类和抽象方法
    • 2.1、抽象类的定义和方法声明规范
    • 2.2、使用继承多态的机制解决问题
  • 三、抽象类的概念和使用特点
  • 总结

一、为什么使用抽象类和抽象方法?

1.1、父类与子类的相互转换

1、给Cat和Dog类分别添加hava的方法
在这里插入图片描述

 class Cat : Animal
 {
     #region
     public Cat(string name, string color, string kind, string favorite)
         : base(name, color, kind)
     {
         this.Favorite = favorite;
     }
     #endregion
     //吃饭
     public override void Have()
     {
         Console.WriteLine("我们要吃香喷喷的烤鱼啦!");
     }
 }

 class Dog : Animal
 {
     #region
     public Dog(string name, string color, string kind, string favorite)
         : base(name, color, kind)
     {
         this.Favorite = favorite;
     }
     #endregion
     //吃饭
     public override void Have()
     {
         Console.WriteLine("我们要吃香喷喷的排骨啦!");
     }
 }

2、实现父类的子类转化。
父类类型可以添加子类对象,子类自动转化成父类类型,但是在取值的时候,必须判断是哪一个子类的对象,父类类型的对象必须强制转换成子类对象,因为父类无法调用子类的方法。
在这里插入图片描述
由于父类不能调用子类的方法,所以这种方法非常的麻烦,所以我们可以使用抽象类和抽象方法,来解决这种问题。

二、抽象类和抽象方法

2.1、抽象类的定义和方法声明规范

在这里插入图片描述

2.2、使用继承多态的机制解决问题

在这里插入图片描述

    {
        //创建一只狗和一只猫
        Cat objCat = new Cat("球球儿", "黄色", "小花猫", "小鱼");
        Dog objDog = new Dog("棒棒", "黑色", "小黑狗", "排骨");
        //将子类对象添加的父类集合
        List<Animal> list = new List<Animal>();
        list.Add(objCat);
        list.Add(objDog);
        //取出子类对象
        foreach (Animal obj in list)
        {
            obj.Have();
        }
        Console.ReadLine();
    }

三、抽象类的概念和使用特点

  • 使用关键字abstract修饰的类,称为为抽象类。
  • 抽象类只是用来列举一个类所具有的行为,不能单独通过创建对象来使用,如Animalanimal=newAnimal0),这种实例化抽奖类的行为是错误的。
  • 抽象类中可以有抽象方法,也可以没有任何抽象方法。
  • 抽象类不能是静态的(static)或密封的(sealed)。
  • 抽象方法必须在抽象类中定义,不能在普通类中使用。
  • 抽象方法只是一个方法的声明,不能有任何方法体。
  • 抽象方法仅仅表示一个应该具有的行为,具体实现由其子类实现。
  • 抽象方法在子类中被实现(重写)必须使用关键字override子类必须重写父类的所有抽象方法,除非子类本身也是抽象类,

总结

抽象类不能实例化,不能是静态方法,子类必须重写,不能有方法体。


http://www.kler.cn/news/311391.html

相关文章:

  • kafka 一步步探究消费者组与分区分配策略
  • Reactor介绍,如何从简易版本的epoll修改成Reactor模型(demo版本代码+详细介绍)
  • YOLOv5/v8 + 双目相机测距
  • 学习大数据DAY58 增量抽取数据表
  • JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)
  • saltstack远程执行
  • 基于SpringBoot+Vue+MySQL的热门网络游戏推荐系统
  • 【网站架构部署与优化】web服务与http协议
  • 十大排序算法的特点及应用场景
  • 英飞凌最新AURIX™TC4x芯片介绍
  • kafka原理剖析及实战演练
  • MySQL-binlog、redolog和undolog的区别
  • android BLE 蓝牙的连接(二)
  • AI生成内容:优点与缺点
  • Docker实操:安装MySQL5.7详解(保姆级教程)
  • 【软考】数据字典(DD)
  • 游戏、网关等服务借助Docker容器化并使用Kubernetes部署、更新等
  • MySQL 中的 EXPLAIN 命令:洞察查询性能的利器
  • MySQL 中的索引覆盖扫描:加速查询的秘密武器
  • 【Linux】Ubuntu 22.04 shell实现MySQL5.7 tar 一键安装
  • 独立站技能树之建站33项自检清单 1.0丨出海笔记
  • STM32 HAL freertos零基础(十一)中断管理
  • Linux技术04-IPVS
  • 游戏如何对抗定制挂
  • Linux线程基础
  • Java-测试-Mockito 入门篇
  • FTP、SFTP安装,整合Springboot教程
  • 基于剪切板的高速翻译工具
  • 【Qt | QAction】Qt 的 QAction 类介绍
  • 电脑键盘功能基础知识汇总