Unity开发之C#基础-多态之抽象类与密封类

前言

上一章我们学习到了c#当中的继承是什么样子的 接下来我们来讲解c#当中的抽象类与密封类的概念

制作不易还请各位一键三连哦!

抽象类的概念

现实生活中有很多抽象概念,它本身不与具体的对象相联系,但可以为其派生类提供一个公共的界面,这类概念在C#中可定义为抽象类。

例如,“图形”就可以作为一个抽象类,每一个图形对象(三角形 正方形 长方形)实际上都是其派生类的实例。也就是说 加入我们每一个图形都会去求面积 但是每一个图形求面积的方式却都不相同。

包含抽象方法的类 就是抽象类。抽象方法和抽象类通过abstract来修饰

抽象类的语法

创建新的项目 并创建新的抽象类和继承抽象类的类
在这里插入图片描述
在这里插入图片描述
上面就是通过关键字来将普通的类修饰成抽象类 那么我们来创建一下这两个类的实例对象:

抽象类的实例化

在这里插入图片描述
当我们想创建抽象类的实例时 会发现有编译错误 因为抽象类不能使用new关键字进行实例化直接创建对象 但是他可以通过派生类相关联

看完抽象类 我们再来看抽象方法

抽象方法

了解抽象方法之前 我们要先知道 抽象类常常会出现这种情况:其所有派生类都应该提供某个方法,但无法为这些方法定义一个统一的实现形式

当然这段话可能 有点太官方 同学们可以理解为所有继承自我们的抽象类都应该去具体的实现抽象类中定义的方法 以实现自己的”多态性“ 要不为什么要定义抽象类呢对吧 为此我们会对抽象类中的方法 也进行抽象化

C#提供的解决方法是:同样使用abstract关键字将此方法定义为抽象方法。抽象方法没有实现代码,但该抽象类的派生类都必须重写方法。

在这里插入图片描述
同样派生类应该通过关键字override来重写抽象方法

在这里插入图片描述
这样 我们就形成了相当于 所有的图形类都要求面积但是每个图形求面积的方法不同 所以我们使用抽象类既强制了求面积的方法 又可以让他们自己去实现逻辑,不过 还有一种情况就是 假如 我的派生类(继承是可以传递的)也是一个抽象类呢?

抽象方法的好处

如果抽象类的派生类是非抽象的,那么它必须重写基类中的所有抽象方法,并为这些方法提供具体的实现;
如果抽象类的派生类也是抽象的,那么它必须重写基类中的所有抽象方法,且重写方法要么提供具体的实现,要么也是抽象的(同时使用override和abstract)

例如:

在这里插入图片描述
我们创建一个新的类 来继承Class2
在这里插入图片描述
那么 我们回到刚才讲到的还有一个问题 抽象类虽然不可以创建实例 但是他可以定义构造函数(不能使用abstract修饰),其作用 是供派生类的构造函数重载使用:
在这里插入图片描述
在这里插入图片描述

介绍完抽象类后 我们来看看密封类是做什么的呢?

密封类

密封类的定义

一些类型不允许或是不需要再有派生类型,在C#中可使用sealed修饰符将其定义为密封类

下面我们来具体看一下:创建新项目 定义新的类
在这里插入图片描述
再创建一个类 继承当前类
在这里插入图片描述
我们会发现 被关键字sealed修饰的类不可以被继承

密封方法的定义

Sealed修饰符还可以用于类的成员方法,其含义是该方法在派生类中不能被重写。
也就是说密封类继承的“截止”,而密封方法是对类继承中方法重写的截止

例如:

我们拿之前抽象类项目来举例
在这里插入图片描述
这里我定的抽象类和抽象方法 那么继承我的类应该重写我的抽象方法
在这里插入图片描述
可继承自我的类也是一个抽象类 那么我现在不想让下面继续继承当前Class2类的子类继续重写Test()方法 所以我在Class2类当中重写Test()方法前加了一个sealed来防止接下来的类继续重写
在这里插入图片描述
果然我的Class3类 即便是继承了抽象类不需要重写也不会出错了

密封方法的注意事项

当一个类本身就已经是密封类,其成员方法不可能再被重写,密封类里面的密封方法sealed可以省略

只有对于非密封类,sealed修饰符才能真正对方法起到“密封”的效果:对声明为该类型的任何对象调用该方法,都能确保当前方法中的代码被执行(但这并不能阻止其派生类使用new关键字来隐藏派生类中的该方法)


总结

以上是对抽象类和密封类的简单介绍 封装继承多态 都是我们面向对象编程需要了解的概念 希望大家可以认真的学习 下期讲解:多态之接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想吃烤地瓜.

高抬小手一点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值