菜的像徐坤
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

多态的四个概念(重载,重写,虚方法和抽象方法)

5848人阅读 2021/5/13 20:29 总访问:960387 评论:0 收藏:0 手机
分类: Csharp

前言

多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。

编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过重写虚成员实现。

重载

什么是重载?

同一个方法名,根据参数的类型,参数的个数,编译器就能够根据实参的不同,确定在哪种情况下调用哪个方法

重载很好的体现了面向对象的多态性

重写

什么是重写?
关键字:override
重写是指子类重新实现父类的某些方法,以实现一些新的功能

抽象类

什么是抽象类
关键字:abstract 

特性:
1.抽象类不能被实例化
2.抽象类可以是一个正常的类,但是抽象方法必须包含在抽象类中
3.我们会把抽象类视为公共基类,如果使用了sealed 修饰符,或者静态修饰符,
这意味着抽象类将不能被继承,所以抽象类不能的密封或者静态的
4.继承抽象类的非抽象类,必须实现未实现的方法,也就是必须被重写

什么是抽象方法?
一个抽象方法通俗易懂的说就是一个没有方法体的方法,
1):抽象方法是隐式的虚方法。
2):只允许在抽象类使用抽象方法声明。

3):因为抽象方法声明不提供实际的实现,所有没有方法体。方法声明只是以一个分号结束,并且在签名后没有大括号,实现由一个重写方法提供,此重写方法是非抽象类的成员。

4):在抽象方法声明中使用static或virtual修饰符是错误的。

5):除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。

6):在静态属性上使用abstract修饰符是错误的。

7):在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。

下面两种抽象方法的写法都是可以的(抽象方法不能设置私有的)

  1. //抽象方法
  2. public abstract void Run();
  3. abstract public void Stop();


抽象方法与抽象类的关系
有抽象方法的类必然是抽象类,
但是,抽象类中的方法并不一定都是抽象方法。


抽象类与一般类的相同点及不同点

相同点:
都可以继承其它的类或者接口,也可以派生子类,并且都有具体的方法;
不同点:
抽象类中有抽象方法,一般类中没有;
抽象类不可以实例化,一般类却可以;

虚方法

关键字:virtual

当子类继承父类时,可以对父类中的虚方法进行重写。
在基类中定义了virtual方法,但是在派生类中没有重写该徐方法,那么调用方法的时候,该方法使用的就是基类中的方法
如果使用override重写了该方法,则使用的方法就是重写过后的方法

抽象方法与虚方法的区别
1.虚方法有方法体,抽象方法没有方法体
2.抽象方法必须被重写,虚方法可以不重写
3.抽象方法只能在抽象类中声明,虚方法不是;

抽象方法与虚方法的共同作用

实现多态,提供给子类重写的方法

评价

C ?、?? 问号和2个问号的用法类型?、对象?

C# ?C# ???:单问号1.定义数据类型可为空。可用于对int,double,bool等无法直接赋值为null的数据类型进行null的赋值如这...

Python实例 1-日志抓取处理 补错附日志小技巧

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

C 数组拆分泛型

主要用到了泛型。泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值...

MySQL 视图的增删改 查

要显示视图的定义,需要在SHOWCREATEVIEW子句之后指定视图的名称, 我们先来创建几张表,完事后在进行演示:--用户信息表...

使用NPOI导出excel包括图片

Excl模板导出相信我们都会,那么模板上要导出图片呢?嗯~还是来个例子:准备工作:首先要引用NPOI包:然后获取数据集(我这...

ajaxSubmit异步上传图片外面都是假的

引用代码<scriptsrc="/Scripts/jquery.form.js"></script>js就在旁边img链接中,只不过大小为0x0,...

.NET MVC 使用百度编辑器详细教程:1配置编辑器

一、什么是百度编辑器百度编辑器UEditor是由百度web前端研发部开发一款应用于网站的编辑器,具有轻量,可定制,注重用户体...

使用jquery操作元素的css样式获取、修改等等

使用jquery操作元素的css样式(获取、修改等等) //1、获取和设置样式 $("#tow").attr("class")...

.net辗转java系列视野

.net辗转java系列(一)视野.net系java系其它语言C#Java框架.net Framework Standardjava se.net corejava eejave meJava S...

.NET MVC json对象或者json对象数组的序列化和反序列化

1、用JSON.stringify()将对象stuarr或者json数组stuarr序列化成字符串,然后提交给后台。$.post("/home/DoUpdate&quot...

.NET MVC json对象或者json对象数组的序列化和反序列化

1、用JSON.stringify()将对象stuarr或者json数组stuarr序列化成字符串,然后提交给后台。$.post("/home/DoUpdate&quot...

mui框架-移动端跳转以及传值的简单方法修改解决方法

纠结了两天的MUI跳转的问题,终于解决了 ,现在分享给大家,希望大家有什么坑的解决也给我分享分享 哈哈,废话不多说,上代...

MVC全局异常处理错误日记

1、在Filter文件夹中创建一个IsExceptionFilter类(类名随意取)2、使用3、在访问的页面控制器中添加几个错误4、在IsExcept...

MVC全局异常处理错误日记

1、在Filter文件夹中创建一个IsExceptionFilter类(类名随意取)2、使用3、在访问的页面控制器中添加几个错误4、在IsExcept...

Hbuilder打包APP的教程会操作的略过

首先项目必须是APP端的,可能讲解有点啰嗦,讲解准备的工具:HBuilderX(其他版本也可以,这里用X版本来讲解)、待测试手机...