菜的像徐坤
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

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

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

前言

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

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

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

重载

什么是重载?

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

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

重写

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

抽象类

什么是抽象类
关键字:abstract 

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

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

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

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

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

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

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

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

//抽象方法
public abstract void Run();
abstract public void Stop();


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


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

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

虚方法

关键字:virtual

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

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

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

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

评价