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

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

文章目录

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

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

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

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

 class Cat : Animal{#regionpublic 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{#regionpublic 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.mrgr.cn/news/34132.html

相关文章:

  • Spring Boot 接口防重复提交解决方案
  • Linux故障排查中常用的命令
  • git config 保存密码
  • Go开发指南- Goroutine
  • 如何将Nop平台与Solon框架集成
  • unity基础,点乘叉乘。
  • 成功案例|大模型备案全网最详细办理流程
  • TypeScript-面向对象(接口、类、对象、泛型)
  • Docker使用指南
  • 计量校准中测量溯源性是什么?已校准设备要怎么处理?
  • 【机器学习】揭秘GBDT:梯度提升决策树
  • 活字格——低代码界的“黑神话悟空”
  • 报错解决方案
  • 【gradio介绍】Python 可视化 web 神器---gradio介绍
  • 24.9.22(中秋佳节)
  • go webapi上传文件 部属到linux
  • 【Unity保龄球项目】的实现逻辑以及代码解释
  • 【Linux】指令和权限的这些细节,你确定都清楚吗?
  • Ubuntu的基本用法与指令(为后面学习ROS打基础)
  • 【BEV 视图变换】Ray-based(2): 代码复现+画图解释 基于深度估计、bev_pool(代码一键运行)
  • SpringBootWeb响应
  • 如何在产品上扩展大储存?外挂SPI Flash库轻松搞定!
  • 二维矩阵的行、列、斜线特征(二维数组)
  • 深入理解MySQL InnoDB中的B+索引机制
  • 【LLM论文日更】| GRIT如何统一文本生成与嵌入
  • HTTP、FTP 和 DICT,这三个协议,你真的了解吗?