C# 探险之旅:第三十节 - 类型class(继承Inheritance) —— 当“儿子”继承“老爸”的遗产

嘿,探险家们!欢迎再次踏上我们的C#奇幻旅程。今天,我们要聊一个既有趣又实用的话题——继承(Inheritance)!想象一下,如果你的“儿子”能够继承“老爸”的遗产,那编程世界里的对象们也能这么做哦!不过,这里的“遗产”可不是金银财宝,而是类和它的成员。

场景设定:动物王国的继承

想象一下,我们身处一个动物王国,这里有各种各样的动物,比如狗(Dog)、猫(Cat)和鸟(Bird)。它们虽然各不相同,但都有一些共同的特征,比如都能吃(Eat)和叫(Bark/Meow/Chirp)。在C#的世界里,我们可以通过继承来实现这种“共同特征”的传递。

创建一个基类(父类)

首先,我们来定义一个基类(父类),就叫它Animal吧!这个类就像是一个“老爸”,它有一些基本的特征和行为。

public class Animal
{
    // 成员变量
    public string Name;

    // 构造函数
    public Animal(string name)
    {
        Name = name;
    }

    // 成员方法
    public void Eat()
    {
        Console.WriteLine($"{Name}正在吃...");
    }

    // 另一个成员方法,等待被子类重写
    public virtual void MakeSound()
    {
        Console.WriteLine($"{Name}发出了一些声音...");
    }
}

 

在这个Animal类里,我们定义了一个成员变量Name,一个构造函数来初始化这个变量,还有两个成员方法:EatMakeSound。注意,MakeSound方法被标记为virtual,这意味着它可以在子类中被重写。

创建子类(继承父类)

接下来,我们来创建一些子类,它们将继承Animal类的“遗产”。

public class Dog : Animal
{
    // 构造函数
    public Dog(string name) : base(name)
    {
    }

    // 重写父类的MakeSound方法
    public override void MakeSound()
    {
        Console.WriteLine($"{Name}汪汪叫!");
    }
}

public class Cat : Animal
{
    // 构造函数
    public Cat(string name) : base(name)
    {
    }

    // 重写父类的MakeSound方法
    public override void MakeSound()
    {
        Console.WriteLine($"{Name}喵喵叫!");
    }
}

在这个例子里,我们创建了两个子类:DogCat。它们都继承了Animal类的成员变量和方法,并且重写了MakeSound方法,以体现它们各自独特的叫声。

使用继承

最后,我们来创建一些对象,看看继承是如何工作的。

class Program
{
    static void Main(string[] args)
    {
        // 创建Dog对象
        Dog dog = new Dog("旺财");
        dog.Eat();
        dog.MakeSound();

        // 创建Cat对象
        Cat cat = new Cat("咪咪");
        cat.Eat();
        cat.MakeSound();
    }
}

在这个例子里,我们创建了一个Dog对象和一个Cat对象,并且调用了它们的EatMakeSound方法。你会看到,虽然DogCat类都有自己独特的叫声,但它们都继承了Animal类的Eat方法。

幽默小结

想象一下,如果你的“儿子”能够继承你所有的财产和技能,那他的人生岂不是轻松多了?在C#的世界里,子类也能继承父类的“遗产”,从而避免重复编写相同的代码。这不仅让编程变得更加高效,还让代码结构更加清晰易懂。

通过今天的探险,你学会了如何使用继承来创建更加灵活和可扩展的代码结构。是不是觉得编程世界也充满了家族和传承的气息呢?

好了,今天的探险就到这里。记住,继承就像是“儿子”继承“老爸”的遗产,它让子类能够继承父类的特征和行为。下次探险,我们再见!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt:Q_GLOBAL_STATIC实现单例(附带单例使用和内存管理)

转载 https://blog.csdn.net/m0_71489826/article/details/142288179 前言 本文主要写Q_GLOBAL_STATIC实现单例以及单例的释放,网上很多教程只有单例的创建,但是并没有告诉我们单例的内存管理,这就很头疼。 正文 使用 Qt 的 Q_GLOBAL_STA…

12.5【Java exp4】【DEBUG】

pro1 JwtAuthenticationFilter 类在两个不同的位置被定义了,导致Spring无法确定使用哪个定义。 为了解决这个问题,你可以采取以下几种方法之一: 检查类路径中的重复类: 确保 JwtAuthenticationFilter 类没有在多个地方被定义。检…

C++11语法解析(二)

可变参数模板 基本语法及原理 ・C11 支持可变参数模板,也就是说支持可变数量参数的函数模板和类模板,可变数目的参数被称为参数包,存在两种参数包:模板参数包,表示零或多个模板参数;函数参数包&#xff1…

《知识拓展 · 统一建模语言UML》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

轻量级日志管理平台:Grafana Loki搭建及应用(详细篇)

前言 Grafana Loki是Grafana Lab团队提供的一个水平可扩展、高可用性、多租户的日志聚合系统,与其他日志系统不同的是,Loki最初设计的理念是为了为日志建立标签索引,而非将原日志内容进行索引。 现在目前成熟的方案基本上都是:L…

【原生js案例】如何让你的网页实现图片的按需加载

按需加载,这个词应该都不陌生了。我用到你的时候,你才出现就可以了。对于一个很多图片的网站,按需加载图片是优化网站性能的一个关键点。减少无效的http请求,提升网站加载速度。 感兴趣的可以关注下我的系列课程【webApp之h5端实…

用于卫星影像间接RPC模型精化的通用光束法平差方法

引言 介绍了通用RPC模型的表达式,which has been down to death 描述了RPC模型产生误差的原因——主要与定义传感器方位的姿态角有关。 每个影像都会对应一个三维点云,但是对同一地物拍摄的不同影像对应出来的三维点云是不一样的,所以才需…

搭建Tomcat(一)---SocketServerSocket

目录 引入1 引入2--socket 流程 Socket(应用程序之间的通讯保障) 网卡(计算机之间的通讯保障) 端口 端口号 实例 client端 解析 server端 解析 相关方法 问题1:ServerSocket和Socket有什么关系? ServerSocket Soc…

玩转个性地图样式!蜂鸟视图蜂鸟云主题编辑器正式上线

当地图不再只是冷冰冰的数据呈现,而是具有美感、适应多场景需求的设计作品时,地图应用的价值也随之提升。 蜂鸟视图推出全新“主题编辑器”功能,助你轻松定制个性化地图样式,赋予地图更多创意与生命力! 一、主题编辑器…

【Figma_01】Figma软件初始与使用

Figma初识与学习准备 背景介绍软件使用1.1 切换主题1.2 官方社区 设计界面2.1 创建一个项目2.2 修改文件名2.3 四种模式2.4 新增界面2.5 图层2.6 工具栏2.7 属性栏section透明度和圆角改变多边形的边数渐变效果描边设置阴影等特效拖拽相同的图形 背景介绍 Ul设计:User Interfa…

MATLAB中all,any函数的应用

all表示要查的范围内全非 0 0 0返回 1 1 1,否则返回 0 0 0 any表示要查的范围内有一个非 0 0 0返回 1 1 1,否则返回 0 0 0 向量和矩阵都可以使用,在矩阵中,可以通过1(看列)或2(看行)设置维度 a l l all all和 a n y any any函数…

.NET 9 已发布,您可以这样升级或更新

.NET 9 已经发布,您可能正在考虑更新您的 ASP.NET Core 应用程序。 我们将介绍更新应用程序所需的内容。从更新 Visual Studio 和下载 .NET SDK 到找出可能破坏应用程序的任何重大更改。 下载 .NET 9 SDK 这些是下载 .NET 9 SDK 所需的步骤。 更新 Visual Studi…

服务器数据恢复—热备盘上线过程中硬盘离线导致raid5阵列崩溃的数据恢复案例

服务器数据恢复环境: 两组分别由4块SAS接口硬盘组建的raid5阵列,两组raid5阵列划分LUN并由LVM管理,格式化为EXT3文件系统。 服务器故障: RAID5阵列中一块硬盘未知原因离线,热备盘自动激活上线替换离线硬盘。在热备盘上…

Mac上使用ln指令创建软链接、硬链接

在Mac、Linux和Unix系统中,软连接(Symbolic Link)和硬连接(Hard Link)是两种不同的文件链接方式。它们的主要区别如下: 区别: 硬连接: 不能跨文件系统。不能链接目录(为…

PCIe学习笔记

PCIE高速串行数据总线 当拿到一块板子 比如你要用到PCIE 首先要看这块板子的原理图 一般原理图写的是 PCI express 表示PCIE 以下是Netfpga为例下的PCIE插口元件原理图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/01dc604fbdc847e8998a978c83c7b2eb.png 一般主…

Elasticsearch Kibana (windows版本) 安装和启动

目录 1.安装 2.启动 elasticsearch 3.启动 kibana 1.安装 elasticsearch下载,官网链接: Download Elasticsearch | Elastichttps://www.elastic.co/downloads/elasticsearch kibana下载,官网链接: Download Kibana Free | G…

linux下查看nginx的安装路径

一般会安装在默认位置下:/usr/local/openresty/nginx 或/usr/local/nginx 查看nginx运行进程,mast process 后面一般是nginx 的安装目录 ps -aux|grep nginx执行ls -l /proc/进程号/exe 会打印出安装/运行位置 ps -aux|grep nginx ls -l /proc/进程号/ex…

strongswan构建测试环境

make-testing脚本文件负责构建strongswan的虚拟化测试系统。位于目录strongswan-5.9.14/testing/,需要以管理员身份运行make-testing。生成测试用到的虚拟客户机镜像,KVM虚拟机和虚拟网络的配置文件位于目录:config/kvm。 ~/strongswan-5.9.14/testing$…

以太网链路详情

文章目录 1、交换机1、常见的概念1、冲突域2、广播域3、以太网卡1、以太网卡帧 4、mac地址1、mac地址表示2、mac地址分类3、mac地址转换为二进制 2、交换机的工作原理1、mac地址表2、交换机三种数据帧处理行为3、为什么会泛洪4、转发5、丢弃 3、mac表怎么获得4、同网段数据通信…

噪杂环境(房车改装市场)离线语音通断器模块

一直在坚持,却很难有机会上热门,在现在这个以流量为导向的时代,貌似很难靠所谓的坚守和热爱把产品成功的推向市场了。目前的客户仍然是以老客户为主,应用场景主要是房车改装,根据九客户的需求定制化一些模块。因为没有…