C# 类和继承(抽象类)

抽象类

抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。

  • 不能创建抽象类的实例。
  • 抽象类使用abstract修饰符声明。

image

  • 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带
    实现的成员的任意组合。
  • 抽象类自己可以派生自另一个抽象类。例如,下面的代码展示了一个抽象类,它派生自
    另一个抽象类。

image

  • 任何派生自抽象类的类必须使用override关键字实现该类所有的抽象成员,除非派生类
    自己也是抽象类。

抽象类抽象方法的示例

下面的代码展示了一个名为AbClass的抽象类,它有两个方法。
第一个方法是一个带有实现的普通方法,它打印出类型的名称。第二个方法是一个必须在派
生类中实现的抽象方法。类DerivedClass继承AbClass,实现并覆写了抽象方法。创建
DerivedClass的对象并调用它的两个方法。

abstract class AbClass    //抽象类
{public void IdentifyBase()  //普通方法{Console.WriteLine("I am AbClass");}abstract public void IdentifyBase();  //抽象方法
}class DerivedClass:AbClass   //派生类
{override public void IdentifyDerived()   //抽象方法的实现{Console.WriteLine("I am DerivedClass");}
}class Program
{static void Main(){//AbClass  a=new AbClass();   //错误,抽象类不能实例化//a.IdentifyDerived();DerivedClass b=new DerivedClass();//实例化派生类b.IdentifyBase();                 //调用继承的方法b.IdentifyDerived();              //调用“抽象”ff}
}

输出结果:

I am AbClass
I am DerivedClass

抽象类的另一个例子

如下代码演示了包含数据成员和函数成员的抽象类的声明。记住,数据成员(字段和常量)
不可以声明为abstract。

abstract class MyBase  //抽象和非抽象成员的组合
{public int SideLength=10;    //数据成员const int TriangleSideCount=3;  //数据成员abstract public void PrintStuff(string s);  //抽象方法abstract public int MyInt{get;set;}         //抽象属性public int PerimeterLength()   //普通的非抽象方法{return TriangleSideCount*SideLength;}
}class MyClass:MyBase
{public override void PrintStuff(string s)   //覆盖抽象方法{Console.WriteLine(s);}private int _myInt;public override int MyInt  //覆盖抽象属性{get{return _myInt;}set{_myInt=value;}}
}class Program
{static void Main(string[] args){MyClass mc=new MyClass();mc.PrintStuff("This is a string.");mc.MyInt=28;Console.WriteLine(mc.MyInt);Console.WriteLine($"Perimeter Length:{mc.PerimeterLength()}")}
}

运行结果

This is a string
28
Perimeter Length:30

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86208.shtml

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

相关文章

关于脏读,幻读,可重复读的学习

mysql 可以查询当前事务隔离级别 默认是RR repeatable-read 如果要测脏读 要配成未提交读 RU 读到了未提交的数据。 3.演示不可重复读 要改成提交读 RC 这个是指事务还未结束,其他事务修改了值。导致我两次读的不一样。 4.RR–可以解决不可重复读 小总结&…

华为云Astro中服务编排、自定义模型,页面表格之间有什么关系?如何连接起来?如何操作?

目录 一、核心关系解析 二、连接方式与操作步骤 (一)服务编排与自定义模型的连接 (二)自定义模型与页面表格的连接 (三)服务编排与页面表格的连接 三、操作示例:构建数据处理闭环 场景:用户在页面表格中修改设备信息,触发服务编排校验数据并更新数据库。 四、…

Docker镜像无法拉取问题解决办法

最近再学习RabbitMQ,需要从Docker镜像中拉取rabbitMQ,但是下拉失败 总的来说就是无法和docker镜像远程仓库建立连接 我又去尝试ping docker.io发现根本没有反应,还是无法连接找了许多办法还是没有办法解决,最后才发现是镜像问题&a…

向 AI Search 迈进,腾讯云 ES 自研 v-pack 向量增强插件揭秘

作者:来自腾讯云刘忠奇 2025 年 1 月,腾讯云 ES 团队上线了 Elasticsearch 8.16.1 AI 搜索增强版,此发布版本重点提升了向量搜索、混合搜索的能力,为 RAG 类的 AI Search 场景保驾护航。除了紧跟 ES 官方在向量搜索上的大幅优化动…

electron-vite串口通信

一、构建项目后,安装“串口通信库” npm install serialport二、设置 npm install --save-dev electron-rebuild ./node_modules/.bin/electron-rebuild 注意:如果执行报错以下问题 1、未配置python变量 2、没有Microsoft Visual Studio BuildTools 3…

Cisco IOS XE WLC 任意文件上传漏洞复现(CVE-2025-20188)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…

从 iPhone 备份照片: 保存iPhone图片的5种方法

随着智能手机越来越融入我们的生活,我们的照片已成为我们设备上最有价值的数据形式之一。然而,iPhone内部存储空间仍然有限,因此我们需要将iPhone中的照片备份到另一个地方,以释放空间并确保珍贵的图像记忆的安全。阅读本指南&…

Ubuntu崩溃修复方案

当Ubuntu系统崩溃时,可依据崩溃类型(启动失败、运行时崩溃、完全无响应)选择以下修复方案。以下方法综合了官方推荐和社区实践,按操作风险由低到高排序: 一、恢复模式(Recovery Mode) 适用场景​​:系统启动卡顿、登录后黑屏、软件包损坏等。 ​​操作步骤​​: ​…

免费批量文件重命名工具

免费批量文件重命名工具 🌐 网站: 免费批量文件重命名工具 📌 工具简介 一款功能强大的批量文件重命名工具,支持多种重命名方式,操作简单,完全免费! 🚀 主要功能 功能描述自定义重命名直接输…

VR博物馆推动现代数字化科技博物馆

VR博物馆:推动现代数字化科博馆新篇章 随着科技的飞速发展,虚拟现实(Virtual Reality, VR)技术已经逐渐渗透到我们生活的方方面面,其中,VR博物馆作为现代数字化科博馆的重要形式之一,以独特的优…

COMSOL与MATLAB联合仿真人工智能的电学层析成像系统

关键词:MATLAB,电学层析成像,人工智能,图像重建,深度学习 一、引言 基于人工智能的电学层析成像系统是一种创新的检测技术,结合了电学层析成像技术与人工智能算法的优势。电学层析成像技术,简…

【Latex】Windows/Ubuntu 绘制 eps 矢量图通用方法(drawio),支持插入 Latex 数学公式

一直感觉 Visio 或者 PPT 中 Mathtype 对 latex 公式渲染效果不好,且在 Ubuntu 下的支持不好,最近重新调研发现一个好用的工具 drawio。 在线使用 https://app.diagrams.net/?srcabout 也有桌面版的应用,Windows 就下载 exe 安装器&#x…

selenium自动化测试学习心得1

1. 关于测试用例的顺序 首先在你测试的主类上面写TestMethodOrder(MethodOrderer.OrderAnnotation.class) 然后在测试用例上面, 写Order(),里面的数字越小,测试的优先级越大 2. 关于getText()和getAttribute("innerText") getText() 是 Selenium 方法,…

Spring AI 结合DeepSeek使用教程

Spring AI 结合DeepSeek使用教程 一、环境搭建与项目初始化 创建Spring Boot项目 使用IDEA或Spring Initializr创建项目,选择JDK 17或更高版本(推荐21)。勾选依赖项:Spring Web、Lombok,Maven或Gradle作为构建工具。添…

Android 布局优化:掌握 <include> 与 <merge> 的实战技巧

引言 在 Android 开发中&#xff0c;布局文件是 UI 设计的核心载体&#xff0c;但随着项目复杂度增加&#xff0c;布局冗余、嵌套层级过深等问题会导致性能下降。本文将通过 代码级实战示例&#xff0c;详细解析如何利用 <include> 和 <merge> 标签优化布局&#…

【storage】

文章目录 1、RAM and ROM2、DRAM and SRAM2、Flash Memory&#xff08;闪存&#xff09;4、DDR and SPI NOR Flash5、eMMC6、SPI NOR vs SPI NAND vs eMMC vs SD附录——prototype and demo board附录——U盘、SD卡、TF卡、SSD参考 1、RAM and ROM RAM&#xff08;Random Acce…

Python异步编程-协程

1、引言 在使用多个爬虫脚本进行数据爬取和调用大语言模型返回结果的场景中&#xff0c;涉及到大量的网络IO操作。协程能够让网络IO操作并发执行&#xff0c;极大地提升程序的运行效率。在智能体相关的开源项目中&#xff0c;我们也可以经常看到协程的身影。 2、协程 协程&a…

大语言模型提示词(LLM Prompt)工程系统性学习指南:从理论基础到实战应用的完整体系

文章目录 前言&#xff1a;为什么提示词工程成为AI时代的核心技能一、提示词的本质探源&#xff1a;认知科学与逻辑学的理论基础1.1 认知科学视角下的提示词本质信息处理理论的深层机制图式理论的实际应用认知负荷理论的优化策略 1.2 逻辑学框架下的提示词架构形式逻辑的三段论…

Android音频开发:Speex固定帧与变长帧编解码深度解析

引言 在Android音频开发领域&#xff0c;Speex作为一种开源的语音编解码器&#xff0c;因其优秀的窄带语音压缩能力被广泛应用。在实际开发中&#xff0c;帧处理策略的选择直接影响着音频传输质量、带宽占用和系统资源消耗。本文将深入探讨Speex编解码中固定帧与变长帧的实现差…

Docke启动Ktransformers部署Qwen3MOE模型实战与性能测试

docker运行Ktransformers部署Qwen3MOE模型实战及 性能测试 最开始拉取ktransformers:v0.3.1-AVX512版本&#xff0c;发现无论如何都启动不了大模型&#xff0c;后来发现是cpu不支持avx512指令集。 由于本地cpu不支持amx指令集&#xff0c;因此下载avx2版本镜像&#xff1a; …