[转]虚方法(virtual)和抽象方法(abstract)的区别
虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?
1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。如:
public abstract class Animal
{
public abstract void Sleep();
public abstract void Eat();
}
//虚方法
public class Animal
{
public virtual void Sleep(){}
public virtual void Eat(){}
}
2. 抽象方法只能在抽象类中声明,虚方法不是。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。如:
{
public abstract void Sleep();
public abstract void Eat();
}
编译器会报错:
Main.cs(10): 'VSTest.Animal.Sleep()' is abstract but it is contained in nonabstract class 'VSTest.Animal'
Main.cs(11): 'VSTest.Animal.Eat()' is abstract but it is contained in nonabstract class 'VSTest.Animal'
3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。如:
{
public abstract void Sleep();
public abstract void Eat();
}
public class Cat : Animal
{
public override void Sleep()
{
Console.WriteLine( "Cat is sleeping" );
}
// we need implement Animal.Eat() here
}
编译器会报错:Main.cs(14): 'VSTest.Cat' does not implement inherited abstract member 'VSTest.Animal.Eat()',因为我们没有实现抽象类中所有抽象方法。
转载于:https://www.cnblogs.com/xingluzhe/p/4720878.html
[转]虚方法(virtual)和抽象方法(abstract)的区别相关推荐
- 虚方法(virtual)和抽象方法(abstract)的区别
虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化.如: //抽象方法 pu ...
- C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载
C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载 using System; using System.Collections.Generic; using Sys ...
- C#中虚方法(virtual)详解
前言;在前面的博客重写中提到了虚方法和抽象类,本博文详细介绍下虚方法: 目录: 一.虚方法的定义: 二.虚方法的声明: 三.虚方法的调用: 四.虚方法的规则: 五.虚方法注意事项: 六.虚方法的好处: ...
- C#进阶学习--虚方法(virtual)
一.定义 简单的说,虚方法就是可以被子类重写的方法,如果子类重写了虚方法,那么运行时将使用重写后的逻辑,如果没有重写,则使用父类中虚方法的逻辑. 定义关键字:virtual 重写关键字:overrid ...
- 虚方法virtual详解(转载)
从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在编译期间是不被静态编译的,它的 ...
- 虚方法、重写方法和抽象方法[转载]
若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚方法 (virtual method).若其中没有 virtual 修饰符,则称该方法为非虚方法 (non-virtual metho ...
- 重写方法,重载方法,虚方法和抽象方法的使用
重写方法,重载方法,虚方法和抽象方法. 重写:指子类重新实现父类的某些方法,以实现一些新的功能.重写的关键字是override.并且重写的方法其签名是相同的. 重载:指允许类中具有相同函数名的方法,但 ...
- 抽象方法与虚方法的区别
一.抽象方法:只在抽象类中定义,方法修饰符不能使用private,virtual,static. 总结:(1)抽象方法只能声明在抽象类中,使用关键字abstract (2)抽象类中的抽象方法必须被子类 ...
- 抽象类,虚方法,接口
这三样很多人容易混淆,在此总结一下 1. 虚方法 Virtual 基类中定义了虚方法,派生类中可以实现,也可以不实现,因为虚方法是有方法体的,如果要实现,派生类中用override重写该方法. pub ...
- java 虚函数_Java的虚方法
虚方法出现在Java的多态特性中, 父类与子类之间的多态性,对父类的函数进行重新定义.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding).在Java中,子类 ...
最新文章
- python语音在线编辑-Python实时语音识别控制
- BZOJ 1046: [HAOI2007]上升序列(LIS)
- mysql平台workb_MySQL分布式事务
- nyoj99(欧拉路)
- 操作系统中PV操作之顾客理发师问题
- python中np没有定义_python中的np.empty_python – np.empty,np.zeros和np.one
- 嵌入式系统Linux内核开发工程师必须掌握的三十道题
- 只加两行代码,为什么用了整整两天时间?
- 11-4实战上色及修复照片
- 扩展ExtJs的编辑器(HtmlEditor):插入图片
- 车机常用adb 命令总结
- ABBYY FineReader离线激活序列号资源及如何查看PDF文档
- 初测ONES项目管理工具,寻求与众不同
- VB中 vbp vbw frm frx log bas 等扩展名大全
- 【游戏开发实战】教你使用Unity实现录屏生成GIF的功能,录个妹子跳舞的GIF吧
- 如何使用 React Native 构建信用卡扫描仪
- matlab插图放大模糊,PPT中怎样简单处理放大后失真的图片
- smplayer_Windows上的SMPlayer入门(更好地播放电影)
- Linux 中复制问题,错误显示 cp:omitting directory
- pythonGUI实现照片或证件照迅速更换自定义背景底色
热门文章
- atitit.md5算法的原理 与 总结
- atitit.解决SyntaxError: missing ] after element list不个object 挡成个str eval ....
- paip.代码生成器数据源格式最佳实践
- paip.验证码识别---反馈法提高识别率
- 《私募证券投资基金业绩报酬指引(征求意见稿)》
- Rust : link.exe 问题 ---LNK1171 error
- 阿里研究院安筱鹏:云计算推动企业迈向高频竞争时代
- 阿里云何登成:开放平台助力企业高效上云管云 | 云栖大会
- Linux宝库名人轶事栏目 | 我与中国开源软件二十年(一)
- 【通信】基于matlab量子密钥分发密钥率仿真【含Matlab源码 1662期】