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

news2024/9/20 18:53:56

文章目录

  • 一、为什么使用抽象类和抽象方法?
    • 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.coloradmin.cn/o/2146181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Facebook的用户隐私保护:从争议到革新

Facebook早期的数据收集方式引发了隐私担忧。平台的快速增长和用户数据的大规模收集使得隐私问题逐渐显现。尤其是在2018年&#xff0c;剑桥分析事件暴露了数千万用户数据被不当使用的问题。这一事件揭示了Facebook在数据保护方面的严重漏洞&#xff0c;引发了公众对隐私保护的…

拓扑排序基础

拓扑排序简要介绍及应用场景 拓扑排序&#xff1a;对图中所有节点进行排序&#xff0c;保证每个节点的前置节点都在这个节点之前。 【使用要求】&#xff1a;有向图&#xff0c;无环 拓扑排序的顺序可能不只一种。拓扑排序也可以用来判断图中有没有环存在。 拓扑排序步骤&a…

【结构型】树形结构的应用王者,组合模式

目录 一、组合模式1、组合模式是什么&#xff1f;2、组合模式的主要参与者&#xff1a; 二、优化案例&#xff1a;文件系统1、不使用组合模式2、通过组合模式优化上面代码优化点&#xff1a; 三、使用组合模式有哪些优势1、统一接口&#xff0c;简化客户端代码2、递归结构处理方…

maxcompute使用篇

文章目录 maxcompute使用篇1.mongoDB与maxcompute 进行数据同步1.1 基本类型的数据1.2部分复杂类型的数据 2.maxcompute中复杂数据类型解析2.1 get_json_object2.2 json_tuple2.3 处理json几种失效的情况:2.4 STR_TO_MAP、MAP_KEYS2.5 regexp_replace2.6 FROM_JSON2.7 nvl2.8 t…

基于matlab的通信系统设计及仿真

文章目录 前言资料获取设计介绍功能介绍设计程序具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

PHP邮箱系统:从入门到实战搭建教程指南!

PHP邮箱系统配置教程&#xff1f;如何选用合适的PHP邮箱系统库&#xff1f; 为了满足个性化和定制化的需求&#xff0c;许多开发者选择使用PHP来搭建自己的邮箱系统。AokSend将带你从入门到实战&#xff0c;详细介绍如何搭建一个功能完善的PHP邮箱系统。 PHP邮箱系统&#xf…

谈谈你对线程池的了解

一、什么是线程池 线程池是一种创建和管理线程的技术。 二、怎么创建线程池 通过Executors工具类的静态方法&#xff0c;创建线程池。创建ThreadPoolExecutor对象&#xff0c;按照业务需要&#xff0c;自定义线程参数&#xff0c;创建线程池。 三、线程池的状态有哪些 线程池的…

VMware vCenter Server 8.0U3b 发布下载,新增功能概览

VMware vCenter Server 8.0U3b 发布下载&#xff0c;新增功能概览 Server Management Software | vCenter 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vcenter-8-u3/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysi…

VirtualBox7.1.0 安装 Ubuntu22.04.5 虚拟机

环境 &#xff08;1&#xff09;宿主机系统&#xff1a;Windows10 &#xff08;2&#xff09;虚拟机软件&#xff1a;VirtualBox7.1.0 &#xff08;3&#xff09;虚拟机系统&#xff1a;Ubuntu 22.04.5 LTS (Jammy Jellyfish) 步骤 &#xff08;1&#xff09;第一步 &…

Python基础(七)——PyEcharts数据分析(面向对象版)

四、使用PyEcharts数据分析案例&#xff08;面向对象版&#xff09; 【前言&#xff1a;为了巩固之前的Python基础知识&#xff08;一&#xff09;到&#xff08;五&#xff09;&#xff0c;并为后续使用Python作为数据处理的好帮手&#xff0c;我们一起来用面向对象的思想来理…

并发编程 - 锁(@synchronized)

引言 在前面的博客中&#xff0c;我们已经讨论了锁在多线程编程中的重要性&#xff0c;主要是为了解决多线程同时访问同一片共享数据时发生的竞争条件&#xff08;race conditions&#xff09;&#xff0c;导致数据不一致和崩溃问题。 并且介绍了一个在Objective-C中&#xf…

mysql笔记7(单表查询)

文章目录 1. select① 从伪表里查数据(可以结合第3点dual理解数据来源)select 文字 ;做计算&#xff1a;select 算式;select 文字( 或算式) as 别名;(as 用于起别名&#xff0c;可省略) ② 从真实表里查数据select * from 表名;select 字段名&#xff0c;字段名 from 表名; 2. …

centos远程桌面连接windows

CentOS是一款广泛使用的Linux发行版&#xff0c;特别是在服务器领域。很多企业和个人用户会选择远程连接到CentOS进行操作和维护。虽然CentOS自带了一些远程桌面解决方案&#xff0c;但它们在使用上存在一些局限性。接下来&#xff0c;我将介绍如何实现CentOS的远程桌面连接&am…

关于wordPress中的用户登录注册等问题

前言 大家在做类似的功能的时候&#xff0c;有没有相关的疑问。那就是我都已经选择好了相应的主题和模版&#xff0c;但是为什么都没有用户注册和用户登录的页面存在呢&#xff1f; WordPress默认情况下不提供用户注册和登录功能的原因是它最初是作为一个博客平台开发的&…

OCR两篇革命之作

DocOwl2 参考 阿里8B模型拿下多页文档理解新SOTA&#xff0c;324个视觉token表示一页&#xff0c;缩减80% mPLUG-DocOwl 2聚焦多页文档理解&#xff0c;兼顾效果和效率&#xff0c;在大幅缩减单页视觉token的前提下实现了多页文档理解的SOTA效果。 仅用324个token表示文档图…

离散制造 vs 流程制造:锚定精准制造未来,从装配线到化学反应,实时数据集成在制造业案例中的多维应用

使用 TapData&#xff0c;化繁为简&#xff0c;摆脱手动搭建、维护数据管道的诸多烦扰&#xff0c;轻量替代 OGG, Kettle 等同步工具&#xff0c;以及基于 Kafka 的 ETL 解决方案&#xff0c;「CDC 流处理 数据集成」组合拳&#xff0c;加速仓内数据流转&#xff0c;帮助企业…

使用雷达速度因子进行越野导航的鲁棒高速状态估计

使用雷达速度因子进行越野导航的鲁棒高速状态估计 Morten Nissov 1 , 2 ^{1,2} 1,2, Jeffrey A. Edlund 1 ^{1} 1, Patrick Spieler 1 ^{1} 1, Curtis Padgett 1 ^{1} 1, Kostas Alexis 2 ^{2} 2 和 Shehryar Khattak 1 ^{1} 1 摘要 在复杂环境中实现机器人自主性以用于关键…

【限流算法】

文章目录 介绍算法原理适用场景令牌通算法实现限流算法 介绍 令牌桶算法是网络流量整形&#xff08;Traffic Shaping&#xff09;和速率限制&#xff08;Rate Limiting&#xff09;中最常使用的一种算法。典型情况下&#xff0c;令牌桶算法用来控制发送到网络上的数据的数目&a…

第6天:趋势轮动策略开发(年化18.8%,大小盘轮动加择时)

原创内容第655篇&#xff0c;专注量化投资、个人成长与财富自由。 轮动策略是一种投资策略&#xff0c;它涉及在不同的资产类别、行业或市场之间进行切换&#xff0c;以捕捉市场机会并优化投资组合的表现。 这种策略的核心在于识别并利用不同资产或市场的相对强弱&#xff0c…

[数据集][目标检测]智慧养殖场肉鸡目标检测数据集VOC+YOLO格式3548张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3548 标注数量(xml文件个数)&#xff1a;3548 标注数量(txt文件个数)&#xff1a;3548 标注…