当前位置: 首页 > news >正文

C#中,虚方法(virtual) 和 抽象方法(abstract)的应用说明

一.虚方法(virtual) 和 抽象方法(abstract)的相关定义说明

1.1.虚方法(virtual)

允许在派生类中被重写,但不强制要求每个派生类都要重写。如果你在基类中声明了虚方法,你可以在任何派生类中使用该方法,并且可以重写该方法以提供特定的实现。

1.2抽象方法(abstract)

是强制要求在派生类中重写,基类本身不提供实现,只是定义了一个方法的签名,而实现则留给派生类。

二.虚方法(virtual) 和 抽象方法(abstract)的示例

2.1虚方法(virtual)

public class Animal
{
//大括号内为自定义行为代码,哪怕是仅仅添加一对空大括号;
    public virtual void Sleep(){方法实体}
    public virtual void Eat(){}
}

 2.2抽象方法(abstract)

public abstract class Animal
{
//没有方法实体,只是定义了一个方法的签名,而实现则留给派生类。
    public abstract void Sleep();//也就是说没有{};
    public abstract void Eat();
}

三.虚方法(virtual) 和 抽象方法(abstract)区别与联系

3.1.抽象方法只有声明部分,而没有实现代码,应用时需要在之类中实现;虚方法有声明和实现代码,并且可以在子类中被重写,也可以不被重写,直接应用父类默认的方法执行。

3.2.抽象类不能被实例化(不可以使用new),只能实例化实现了全部抽象方法的派生类;而包含虚方法的类可以实例化。

3.3.虚方法与多态性关系密切,虚方法允许派生类完全或部分重写该类的方法,需要写方法体代码。抽象方法只是一个定义,没有方法体,也就是没有{},也不用在里面写内容。

3.4.抽象方法和虚拟方法两个相同的一点是都用override重写。

简单说,抽象方法是需要子类去实现的。虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求。抽象方法和虚方法都可以供派生类重写。

四.虚方法(virtual) 和 抽象方法(abstract)注意事项

4.1虚方法(virtual)

a、当父类中有需要子类重写的方法,则可将该方法标记为virtual;

b、虚方法必须在父类中有实现或者空实现;

c、子类可以选择继承(不重写)父类的功能,也可以选择不继承(重写);

4.2抽象方法(abstract)

a、抽象方法不能实现;

b、抽象方法必须放在抽象类中;

c、抽象方法不能是私有的;

d、抽象类被继承的时候,子类必须实现抽象类里面的所有抽象方法;

五.总结

虚方法实际上是面向对象中多态的体现,不同的对象面对同一事物的不同反应,调用基类的虚方法来执行派生类的具体操作,而基类在调用时,并不需要知道派生类是怎么样实现的。

抽象方法就像他的名字一样,只负责“抽象”,具体实现交给子类来完成。


http://www.mrgr.cn/news/46934.html

相关文章:

  • MATLAB学习笔记-table
  • DHCP详解和部署
  • STM32之两种驱动 “旋转编码器“ 方式
  • 127.【C语言】补充:函数的三种调用约定
  • 【计算机网络】深入浅出计算机网络
  • AAAI2020 | Ghost | 通过幽灵网络学习可迁移的对抗样本
  • Elasticsearch 索引备份
  • python xml的读取和写入
  • 【centos 虚拟机】kvm权限报错解决 gid:107
  • Unity3D 动画回调函数详解
  • 怎么把mov格式的视频转换mp4?视频格式转换就看这5招!(值得收藏)
  • 喜讯!华秋电子宣布完成新一轮3.1亿元融资
  • 引领数字化转型新潮流:The Open Group 2024生态系统架构·可持续发展年度大会邀您共襄盛举
  • 从零开始搭建一个node.js后端服务项目
  • 二叉树搜索
  • 解决 MySQL 连接数过多导致的 SQLNonTransientConnectionException 问题
  • 负载均衡(Load Balancing)
  • 华为OD机试真题-最佳对手-2024年OD统一考试(E卷)
  • 【docker】存储之目录挂载和卷映射
  • mysql主从配置
  • SpringCloud 集成 OpenFeign 实战指南
  • 数据库迁移中的权限问题及解决方法——以Error 1142为例
  • 深入理解HTTP Cookie
  • FineReport报表查询初始化直接显示表头内容
  • 基于SSM的民宿管理系统【附源码】
  • 基于SpringBoot vue的CSGO赛事管理系统设计与实现