接口,虚方法,抽象方法

简介: 接口,虚方法,抽象方法

抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。

重写的子类虚函数就是被覆盖了。


抽象方法


使用abstract关键字 public abstract bool Withdraw(…);


抽象方法是必须被派生类覆写的方法。


抽象方法是可以看成是没有实现体的虚方法


如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法


虚方法


使用virtual关键字 public virtual bool Withdraw(…);


调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。


虚方法可以有实现体 若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚拟方法;


一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。


虚函数的限制:


1.虚函数仅适用于有继承关系的类对象, 所以只有类的成员函数才能说明为虚函数.


2.静态成员函数不能是虚函数.


3.内联函数不能是虚函数.


4构造函数不能是虚函数.


5.析构函数可以是虚函数. 简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.


简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.


虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?


1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。


2. 抽象方法只能在抽象类中声明,虚方法不是。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。


3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。


都必须建立在继承关系下才可以使用


区分点: 虚方法: 虚方法是在明确父类下的子类有共通的方法,且还有各自的特性方法下使用


抽象方法:抽象方法是明确父类下的子类没有共通的方法,且不明确如何写,子类有各自的特性方法下使用


接口: 接口是抽象方法下的特性方法,可以添加在抽象子类下作为抽象方法。


相关文章
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
297 5
|
Ubuntu Linux
Fedora 36 ARM 镜像源更换与软件安装
Fedora 36是Linux发行版,由社区开发,红帽赞助。安装软件通常用DNF(RPM包)。若需安装.deb包,先用alien转换。遇到问题时,可删除`/etc/yum.repo.d`目录内容,改用阿里云镜像源,如: 简而言之,Fedora 36的软件安装涉及DNF或alien,镜像源更换解决安装问题,阿里云镜像提供速度优化。
775 9
|
11月前
|
消息中间件 RocketMQ
2024最全RocketMQ集群方案汇总
在研究RocketMQ集群方案时,发现网上存在诸多不一致之处,如组件包含NameServer、Broker、Proxy等。通过查阅官方文档,了解到v4.x和v5.x版本的差异。v4.x部署模式包括单主、多主、多主多从(异步复制、同步双写),而v5.x新增Local与Cluster模式,主要区别在于Broker和Proxy是否同进程部署。Local模式适合平滑升级,Cluster模式适合高可用需求。不同模式下,集群部署方案大致相同,涵盖单主、多主、多主多从等模式,以满足不同的高可用性和性能需求。
1569 0
|
JavaScript
在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】
文章详细介绍了在Vue项目中安装和使用`vue-quill-editor`的步骤,包括如何通过npm安装、局部挂载、在Vue页面中引入和配置使用。同时,还提供了如何实现图片的缩放和拖拽功能的进阶教程,涉及到安装额外的插件`quill-image-drop-module`和`quill-image-resize-module`,以及对Webpack配置的调整。最后,文章还提供了实际效果展示和一些后续可能的拓展功能,如上传视频和将图片上传到服务器等。
在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】
|
前端开发 JavaScript 搜索推荐
[初学者必看]JavaScript 15题简单小例子练习,锻炼代码逻辑思维
【6月更文挑战第3天】这是一个JavaScript编程练习集,包含15个题目及答案:计算两数之和、判断偶数、找数组最大值、字符串反转、回文检测、斐波那契数列、数组去重、冒泡排序、阶乘计算、数组元素检查、数组求和、字符计数、数组最值和质数判断以及数组扁平化。每个题目都有相应的代码实现示例。
1061 1
|
JavaScript 前端开发
location.href和 window.location的区别有这些!
location.href和 window.location的区别有这些!
3526 3
|
消息中间件 监控 Kafka
查询Kafka集群中消费组(group)信息和对应topic的消费情况
查询Kafka集群中消费组(group)信息和对应topic的消费情况
6130 0
|
编译器 C语言 C++
Windows下配置GCC(MinGW)环境
Windows下配置GCC(MinGW)环境
4000 0
|
关系型数据库 MySQL 数据库
Specified key was too long; max key length is 767 bytes导入mysql数据库表报错
Specified key was too long; max key length is 767 bytes导入mysql数据库表报错
1284 0