C#中简单的继承和多态

今天我们来聊一聊继承,说实话今天也是我第一次接触。

继承的概念是什么呢?就是一个类可以继承另一个类的属性和方法(成员)

继承是面向对象编程中的一个非常重要的特性。

好了,废话不多说,下面切入正题:

1.首先我们定义一个子类,给它创建两个构造:一个无参构造和一个有参构造

  定义一个枚举类

在定义的子类中它有自己独有的属性:

 

在定义的父类中的属性和构造:

 

在Main方法中:

同时要注意,在调用子类的带参构造时,我们要想到调用子类构造的时候,没有使用base关键字调用父类的指定的构造,默认调用父类的无参构造.

补充一下:

   01.base代表父类对象,如果base():调用父类的构造函数

   02.base代表的是方法调用,是不需要参数类型的

  03.base(传参顺序和父类构造一致,变量名和子类构造参数一致)

2.在这里补充一点访问修饰符

我们所知道的:public  private  protected

下面我画一个图来简单的描述一下(√表示可以,×表示不可以)

                  当前类     子类     其他类(Program)
   private         √          ×        ×
   protected     √          √        ×
   public           √          √        √

总结:我们可以清晰的明白三种访问修饰符对类成员的访问限制强度:private>protected>public

 3.new 子类底层原理图

我简单的用一个图来描述一下:

用文字描述:

   1.走到子类构造,不进入构造体
   2.转向父类,进入父类构造体执行
   3.转回子类构造,执行子类构造体
   4.转到Main,内存中构建出子类对象

4.继承还具有两大特性这个我们也不要忘记了,就是单根性和传递性

  单根性指的就是一个子类只有一个父类

  传递性就是只要跟父类有继承关系,就可以使用父类的属性和方法

接下来我们讲一讲多态

1.多态是什么呢?字面上的意思就是多种形态

用专业一点的话来说就是指同一个操作作用于不同的对象时,可以有不同的解释,产生不同的执行效果。

我们所接触的方法重载也是多态的一种方式。

如何实现多态呢?不要急下面我来解说

(1)实现方法的重写

      在父类中定义的方法,用virtual关键字来定义为虚方法

     在子类中定义自己的方法,用override关键字来修饰,实现对父类的方法的重写

(2)定义父类变量,用子类变量初始化父类变量

是不是觉得抽象,其实我刚开始学习时也是一样的,下面来一个小案例:

//创建一个Person父类

 public class Person
    {
       public virtual void SayHello()
       {

            //父类特有的方法
           Console.WriteLine("父类打招呼方法");
       }
    }

//创建一个Korea子类

public class Korea:Person  //在这里要注意它继承于Person类
    {
       public override void SayHello()
       {
           Console.WriteLine("金喜善打招呼方法");
       }
    }

//创建一个Chinese类

public class Chinese:Person //在这里要注意它继承于Person类

    {
       public override void SayHello()
       {
           Console.WriteLine("你好!");
       }
    }

//创建一个American类

public class American:Person   //在这里要注意它继承于Person类
    {
        public override void SayHello()
        {
            Console.WriteLine("Hello");
        }
    }

 前面我们也学过泛型了下面我们就用泛型来存储

            List<Person> list=new List<Person>();
            Chinese chinese=new Chinese();
            American usa=new American();
            Korea korea=new Korea();

            list.Add(chinese);
            list.Add(usa);
            list.Add(korea);

下面我们可以用foreach来遍历

方式一:

           foreach (Person person in list)
            {
               person.SayHello();
            }

方式二:

           foreach (Person person in list)
            {

               //方式二:不使用统一调用
                if (person is Chinese)
                {
                   Chinese chinese= person as Chinese;
                    chinese.SayHello();
                }

               if (person is Korea)
                {
                    Korea chinese= person as  Korea;
                    korea.SayHello();
                }

               if (person is  American)
                {
                    American chinese= person as  American;
                     american.SayHello();
                }

            }

下面我再穿插个示例:

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

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

相关文章

微信小程序使用camera扫码获取相机权限

确保用户隐私指引已经明确使用相机功能 “mp-weixin”: "permission": {"scope.camera": {"desc": "需要使用相机功能&#xff0c;请授权"}}wx.authorize({scope: scope.camera,success(res) {console.log(res, 用户成功授权)// 用户…

C语言实现Hoare版快速排序(递归版)

Hoare版 快速排序是由Hoare发明的&#xff0c;所以我们先来讲创始人的想法。我们直接切入主题&#xff0c;Hoare版快速排序的思想是将一个值设定为key&#xff0c;这个值不一定是第一个&#xff0c;如果你选其它的值作为你的key&#xff0c;那么你的思路也就要转换一下&#xf…

巧妙的使用WPF中的资源

其实&#xff0c;在wpf中&#xff0c;最核心的就是xaml&#xff0c;因为只有xaml&#xff0c;才能体现出用的是wpf&#xff0c;而不是普通的cs文件&#xff0c;cs文件在winform中等等程序都可以使用的&#xff0c;唯独xaml才是wpf中最重要的&#xff0c;最精华的东西&#xff0…

gitlab ci pages

参考文章 gitlab pages是什么 一个可以利用gitlab的域名和项目部署自己静态网站的机制 开启 到gitlab的如下页面 通过gitlab.ci部署项目的静态网站 # build ruby 1/3: # stage: build # script: # - echo "ruby1"# build ruby 2/3: # stage: build …

jupyter notebook介绍、安装和使用

简介 Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算&#xff1a;开发、文档编写、运行代码和展示结果。——Jupyter Notebook官方介绍 简而言之&#xff0c;Jupyter Notebook是以网页的形式打开&#xff0c;可以在网页页面中直接编写代码和运…

Spring Boot+Mybatis设置sql日志打印

在全局配置文件添加以下内容&#xff1a;logging.level.com.demo.mapperdebug&#xff0c;com.demo.mapper&#xff1a;src下的mapper路径&#xff0c;debug&#xff1a;设置日志打印级别为debug&#xff0c;亦可设置为&#xff1a;ERROR、WARN、INFO application.properties …

10-流媒体-RTMP编译

将h264推流给服务器&#xff0c;就完成了采集端的推流工作。一般在嵌入式系统常用的rtmp推流方案是rtmpdump。使用rtmp库涉及到一些编译过程&#xff0c;下面我们一点点描述。 关于rtmp的使用涉及到3个开源库的编译&#xff08;openssl, zlib, rtmpdump&#xff09;&#xff0c…

【C++】optional的使用(一)

这篇文章介绍下C17引入的std::optional 为什么要有 optional 一般来说&#xff0c;如果想要一个函数返回“多个”值&#xff0c;C程序员倾向于使用结构体/类完成这个操作。即定义一个通用的结构体&#xff0c;在函数内部完成装填&#xff0c;然后返回一个实例化的结构体。 #…

fckeditor编辑器改造示例:增加PRE,CODE控件

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置&#xff0c;前后端开发环境的配置&#xff0c;编辑器的配置&#xff0c;网络服务的配置&#xff0c;网络命令的应用与配置&#xff0c;windows常见问题的解决等。 文章目录 修改方法&#xff1a;1&#xff09;修改fckco…

Python项目——贪吃蛇

1、原理 整个界面由一个二维数组组成。游戏开始时&#xff0c;会随机生成一个苹果&#xff08;红点&#xff09;和一条蛇&#xff08;黄点&#xff09;。蛇会在二维数组中移动&#xff0c;当蛇碰到苹果时&#xff0c;苹果被吃&#xff0c;蛇的长度加一&#xff08;红点变黄点&…

性能测试

什么是性能测试&#xff1f;性能测试定义性能测试和功能测试区别性能测试常见术语及指标1&#xff1a;用户数3&#xff1a;响应时间4&#xff1a;事务5&#xff1a;每秒事务通过数6&#xff1a;用户点击率7&#xff1a;吞吐量8&#xff1a;吞吐率9&#xff1a;思考时间10&#…

基于ssm的简单学校课程管理系统的设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于ssm的简单学校课程管…

探索Nginx的奥秘--从代理到负载均衡的艺术实践

文章目录 &#x1f33a;Nginx的引入&#x1f33a;&#x1f33a;深刻理解正向代理与反向代理&#x1f33a;&#x1f339;Reverse proxy&#x1f339;&#x1f339;正向代理与反向代理的区别&#x1f339;&#x1f339;反向代理为什么叫反向代理&#x1f339;&#x1f339;负载均…

C#教程(三):字符串的各种用法

在C#中&#xff0c;字符串&#xff08;string 类型&#xff09;是一种常用的数据类型&#xff0c;用于存储和操作文本数据。以下是一些C#中字符串的常见用法 1、输出任意的字符串长度 代码 #region 输出任意的字符串长度 Console.WriteLine("请输入你心中想到的名字&…

Activiti工作流框架学习笔记(一)之通用数据表详细介绍

文/朱季谦 Activiti工作流引擎自带了一套数据库表&#xff0c;这里面有一个需要注意的地方&#xff1a; 低于5.6.4的MySQL版本不支持时间戳或毫秒级的日期。更糟糕的是&#xff0c;某些版本在尝试创建此类列时将引发异常&#xff0c;而其他版本则不会。执行自动创建/升级时&a…

C++ 二叉搜索树(BST)的实现(非递归版本与递归版本)与应用

C 二叉搜索树的实现与应用 一.二叉搜索树的特点二.我们要实现的大致框架三.Insert四.InOrder和Find1.InOrder2.Find 五.Erase六.Find,Insert,Erase的递归版本1.FindR2.InsertR3.EraseR 七.析构,拷贝构造,赋值运算符重载1.析构2.拷贝构造3.赋值运算重载 八.Key模型完整代码九.二…

2020年第九届数学建模国际赛小美赛D题石头剪刀游戏与合作解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 D题 石头剪刀游戏与合作 原题再现&#xff1a; 小时候你可能至少玩过几次石头剪刀游戏。在这个游戏中&#xff0c;你几乎有三个选择&#xff0c;每一个都有一个项目要打败&#xff0c;一个项目输给。石头打败剪刀&#xff0c;剪刀剪纸和布覆…

yasaf永安视安防监控恢复案例

永安视(yasaf)一个小到连官网都没有的安防厂商&#xff0c;是国内众多品牌中的一个&#xff0c;可以说是小十八线&#xff0c;让人敬佩的是这么一个小厂也自行写了嵌入式方案&#xff0c;下边我们来看看这个恢复案例。 故障存储: WD500G 故障现象: 此安防设备在使用过程中被…

python/c++ Leetcode题解——1.两数之和

目录 方法1:枚举法 思路 Code 方法2:哈希表 思路 Code 方法1:枚举法 思路 最容易想到的方法是枚举数组中的每一个数 x&#xff0c;寻找数组中是否存在 target - x。 当我们使用遍历整个数组的方式寻找 target - x 时&#xff0c;需要注意到每一个位于 x 之前的元素都已…

【机器学习】应用KNN实现鸢尾花种类预测

目录 前言 一、K最近邻&#xff08;KNN&#xff09;介绍 二、鸢尾花数据集介绍 三、鸢尾花数据集可视化 四、鸢尾花数据分析 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Fil…