首页 > 编程语言 >刘铁猛C#学习笔记18 重写与多态

刘铁猛C#学习笔记18 重写与多态

时间:2024-02-23 23:37:50浏览次数:23  
标签:刘铁猛 C# 子类 多态 方法 实例 override 父类 重写

重写override

子类中重新定义父类中已有的方法

重写语法

需要在要重写的父类方法添加一个virtual修饰符(虚方法) 在子类中的同名方法添加一个override修饰符   子类中添加新的成员,是继承中对父类的横向扩展 重写不添加新成员,而是增加已有成员的新版本,可以看着对父类的纵向扩展 但使用不同类型的实例调用该方法时,对应的方法版本就会被调用 (活字印刷的实现,一个坑里可以放同规格不同铅字)  

重写的条件

要重新的对象必须对子类可见(public或者protected) 方法签名需要一致(方法的参数列表、返回值、方法名)  

多态

基于上一节提到的 父类变量可以装子类实例 但调用装着子类实例的变量时,运行的是子类中的方法逻辑 对重写方法,实际执行的方法逻辑是根据实例的类型  

隐藏与重写的区别

若不写virtual和override,则称为 子类对父类成员隐藏 隐藏父类方法的子类中,还是有两个版本的该方法 而重写父类方法的子类中,只有一个版本该方法,那就是重写后的方法 实际工程中几乎不使用隐藏 JAVA中是天然重写,不需要加override和virtual 而在C#中这样写,并不能触发重写,会变成隐藏 方法调用时是顺着变量类型继承链向下找,到实例的类型结束 会找到最新(继承链上在下方的)被重新的方法版本  

属性重写

属性的实现是通过get、set方法对字段封装,所以属性也可以使用重写 语法是在父类属性名前加virtual,子类重新属性名前加override 可以修改其中的逻辑  

python中的重写

python中变量没有类型,实例对象有类型 所以不能用父类变量装子类实例然后调用重写后的方法,没有多态的效果  

标签:刘铁猛,C#,子类,多态,方法,实例,override,父类,重写
From: https://www.cnblogs.com/jk-2048/p/18030563

相关文章

  • 刘铁猛C#学习笔记19 抽象类、接口与SOLID五大原则
    接口与抽象类是所有高阶面向对象的起点,是学习设计模式的前置条件必须有实践基础之后,才能真正掌握算法、设计模式 设计模式的基础solid五大设计原则(待续)1.单一职责原则singleresponsibilityprinciple2.开放-关闭原则Open-closeprinciple,简称为开闭原则“封装确定的,......
  • 刘铁猛C#学习笔记21 反射与依赖注入
    反射对于一个现有对象,能够在不使用new操作符、不知道其具体静态类型的情况下,创建出一个同类型的对象,还能访问这个复制品对象拥有的各个成员。相当于进一步的解耦,可以不使用new操作符,就没有类型的依赖关系这样的耦合关系甚至可以弱到忽略不计反射在.NET和JAVA中非常重要 ......
  • C#数据结构 字典Dictionary
    简介字典是C#开发中经常使用的一种键值对容器,类似C++的map,可使用foreach或迭代器遍历不能装多个相同key,底层实现是哈希函数具体用法1.创建Dictionary<key,value>//Key和Value可以是任意类型Dictionary<int,string>_testDic=newDictionary<int,string>();2.添加......
  • 刘铁猛C#学习笔记13 委托1
    “幻想:如果能有一种能把方法当参数的方法就好了”一、什么是委托委托源自C、C++中的函数指针 1.C语言中的函数指针(1)函数的直接调用先准备好一个加法函数,一个减法函数可以通过函数名调用这两个函数,这种调用方法称作直接调用 (2)函数指针的声明、间接调用先按下......
  • C++ 令人无语/好用的语法合集
    此贴用来总结一些傻逼C++语法,或者坑了我很久的写法。1、(坑)重载>,<,==时,千万不要使用pair为基的typedef!!!!!!pii的max不受你的重载影响,它自己有自己的max,然后typedef和define是相同的,基本可以看做直接替换,不会对作用域/命名做区分。2、(坑)lower_bound(..,..,{x......
  • containerd环境搭建指南
    目录一.container概述1.什么是containerd2.为什么要学习containerd二.基于yum方式安装containerd1.获取软件源2.查看yum源中containerd软件版本3.安装containerd的4.查看containerd的版本信息5.设置containerd开机自启动6.查看containerd的客户端和服务端的版本信息三.基于二进制......
  • SciTech-EECS-PCB电路板设计-使用KiCad进行PCB设计的基本流程
    使用KiCad进行PCB设计的基本流程,2024-02-2314:04KiCad是一款强大的开源PCB设计软件,其设计的大体流程包括:原理图设计及导出网表文件,PCB布局和布线,导出Gerber文件及制板;以下是使用KiCad进行PCB设计的基本步骤:0.安装KiCad:首先,你需要安装KiCad软件。KiCad官方网站下载......
  • 刘铁猛C#学习笔记10 字段、属性
    这四种东西都是用来表达数据的一、字段(成员变量)曾用名:成员变量是为一个对象或类型存储数据的变量,区别于方法体中的局部变量多个字段组合起来可以表示对象当前的状态起源:C语言中结构体的成员变量一个对象占用的内存空间会被分配给各个字段1.实例字段和静态字段可以分为......
  • 刘铁猛C#学习笔记11 索引器、常量
    一、索引器[]概述使一个对象可以像数组一样用方括号[]去访问其元素ex:字典的声明 1.索引器的声明首先像上文那样声明一个字典Dictionary<,>在VS中输入indexer,然后敲两下tab就能得到:(按下tab可以跳到下一个可编辑项上)第一个类型参数为返回值的类型,第二个类型参数为......
  • 刘铁猛C#学习笔记12 参数种类详解
    一、值参数(传值参数、值传递)指参数的种类为值参数,而非参数数据类型为值类型1.值类型的传值参数类似一个新声明的局部变量,或传进来的实参的一个副本可以在方法体内重现赋值,但其在方法体内被赋值时,不会影响传进来的本体 2.引用类型的传值参数引用类型变量存储的是实例......