热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

抽象方法和虚方法的区别

1、虚方法必须有实现部分,而抽象方法必须没有实现部分,如下面的代码:虚方法publicclassAnimal{publicvirtualvoidSleep(){}

1、虚方法必须有实现部分,而抽象方法必须没有实现部分,如下面的代码: 

//虚方法
public class Animal
{
public virtual void Sleep(){}
public virtual void Eat(){}
}
//抽象方法public abstract class Animal{    public abstract void Sleep();    public abstract void Eat();}

2、也正是因为抽象方法没有实现部分,所以必须强制其派生类重写该方法,看下面的代码,就少了重写Eat() 的方法:

public class Cat : Animal
{
public override void Sleep()
{
Console.WriteLine( "Cat is sleeping" );
}
}

其实这一点我们大可不必担心,因为如果我们指定一个子类继承抽象父类(或者接口)那么我们的编译器会自动添加必须重写的方法,这一点是抽象方法类似接口的地方,因为他们的原理机制是一致的。

3、抽象方法和虚方法生存的环境不同:

抽象方法必须生存在抽象的饿类中,因为现实生活中一个看不见摸不着的东西只会存在于抽象的空间中,我们不能说:你看这个箱子里存放着我现在大脑中真实的想法。恰相反,在一个大的箱子里完全可以放下一个空的小箱子(空的函数体),而这个小箱子到底要放什么东西呢?我需要在具体使用的时候才能决定,也就是子类中重写的时候放的是什么就是什么,当然我完全可以重写多次,第一种情况:我把小箱子里的东西换掉,换成别的东西;第二种情况:小箱子里再放小箱子,这就类似于迭代了,与要谈论的重点不是很太一致。

4、作用效果不太一样:

抽象方法,本身不具有真实的方法体,因此方法的功能都以重写的方法为准;虚方法,有方法的声明和实现(小箱子里可以已经存在了东西),子类重写后可以覆盖父类的方法,也可使用默认方法(可更换也可保持原样)。

4、代码中的不同:

因为一个抽象的概念不能被当成实体物一样有声有色的存在,因此当我们在使用包含有抽象方法的抽象类的时候就不能用New关键字来实例化。

包含抽象方法的抽象类必须用 abstract 关键字来声明。

4、抽象方法和虚方法的相同之处:

其实说到上面的话,很容易就想到抽象方法和虚方法的相同之处——多态。现实生化中,不同的人对一个抽象概念概念的理解可以是多方面的——抽象方法的重写;虚方法通过盛放不同的事物——虚方法的重写,这就是.NET平台的多态的机制,不是吗?

5:代码中的相同之处:

其实也很简单,因为都是在重写基类中的方法都需要用override关键字。

 


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
author-avatar
OH-MQNZ_259
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有