在查阅资料的过程中,偶然看到了虚方法和抽象方法,对其做个小结。

对比学习:

虚方法必须有实现部分,抽象方法不可以有实现部分;

虚方法可以在派生类中重写也可以不重写,抽象方法必须在派生类中重写;

虚方法可以在任何非密封类中声明,抽象方法只能在抽象类中声明;

如果类包含抽象方法,那么该类也必须为抽象的,不能实例化。

EXAMPLE(只为说明问题,未必恰当):

比如有个基类“鸟类”,两个子类“鸡”和“鸭”。

鸡叫:咕咕。

鸭叫:呱呱。

鸡飞:扑棱翅膀,短距离飞行。

鸭飞:扑棱翅膀,长距离飞行。

对于”叫“这个方法,完全不同。就可以把叫声明为抽象方法,基类只声明此方法来作约束,强制子类实现。

CODE(C#)

Birde类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace AbstractAndVirtual
{abstract class Bird{public abstract void Sing();}
}

Chicken类:

<pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace AbstractAndVirtual
{class Chicken : Bird{public override void Sing(){Console.WriteLine("咕咕");}}
}

Duck类:

<pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace AbstractAndVirtual
{class Duck : Bird{public override void Sing(){Console.WriteLine("呱呱");}}
}

客户端:

<pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace AbstractAndVirtual
{class Program{static void Main(string[] args){Bird chicken = new Chicken();chicken.Sing();Bird duck = new Duck();duck.Sing();Console.Read();}}
}

对于“飞”这个方法,它们有共性也有区别,就可以把飞声明为虚方法,基类里实现共性部分,各子类实现个性部分。

CODE(C#)

Bird类:

namespace AbstractAndVirtual
{class Bird{public virtual void fly(){Console.WriteLine("挥动翅膀");}}
}

Chicken类:

namespace AbstractAndVirtual
{class Chicken : Bird{public override void fly(){Console.WriteLine("扑棱翅膀");Console.WriteLine("短距离飞行");}}
}

Duck类:

namespace AbstractAndVirtual
{class Duck : Bird{public override void fly(){Console.WriteLine("扑棱翅膀");Console.WriteLine("长距离飞行");}}
}

客户端:

namespace AbstractAndVirtual
{class Program{static void Main(string[] args){//Bird chicken = new Chicken();//chicken.Sing();//Bird duck = new Duck();//duck.Sing();Bird chicken = new Chicken();chicken.fly();Bird duck = new Duck();duck.fly();Console.Read();}}
}

有兴趣的话实现一下以上代码,很有意思。看到这里,相信大家都能理解虚方法和抽象方法的区别了吧。

虚方法和抽象方法的区别相关推荐

  1. C#~虚方法,虚方法和抽象方法的区别

    虚方法 特点: <1>虚方法必须使用virtual修饰 <2>虚方法同抽象方法(adstract)一样使用override关键字重写 <3>虚方法在子类中可以实现, ...

  2. C#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别

    虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项.抽象方法没有提供实现部分,抽象方法是一种强制派生类重写的方法,否则派生类将不能 ...

  3. java虚方法和抽象方法_虚方法和抽象方法--基础回顾

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

  4. C#类、接口、虚方法和抽象方法

    C#类.接口.虚方法和抽象方法 虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项.抽象方法没有提供实现部分,抽象方法是一种强制派 ...

  5. 重写方法,重载方法,虚方法和抽象方法的使用

    重写方法,重载方法,虚方法和抽象方法. 重写:指子类重新实现父类的某些方法,以实现一些新的功能.重写的关键字是override.并且重写的方法其签名是相同的. 重载:指允许类中具有相同函数名的方法,但 ...

  6. C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

    1.C#类和接口的区别 接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现! 在类中也有抽象类的定义,抽象类与接口的区别在于: 抽象类是一个不完全的类,类 ...

  7. C# 虚方法与抽象方法区别

    虚方法是必须要实现的,只有接口或者抽象方法才没有实现体,什么是实现体,就是方法的那对大括号:下面举例: public abstract void Fn1();//定义一个抽象方法 public vit ...

  8. C#类、接口、虚方法和抽象方法-抽象类与接口的区别与联系

    C#抽象类和接口之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于抽象类和接口的选择显得比较随意.其实,两者之间还是有很大的区别的.首先,以抽象类的 ...

  9. 虚方法(virtual)和抽象方法(abstract)的区别

    虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化.如: //抽象方法 pu ...

最新文章

  1. 机器学习笔记:线性判别分析(Fisher)
  2. arm7 mysql 编译安装_uboot的readme导读(转)
  3. C语言有参函数调用时参数值传递问题
  4. 华为mate40搭载鸿蒙,华为mate40搭载鸿蒙还是EMUI11,答案来了
  5. 驾校一点通下载|驾校一点通电脑版下载
  6. 盘点2018:数据和云最受欢迎的十大精品文章
  7. java零碎要点---class()、getClass()、Class.forName()、getClassLoader()的区别和联系--又不详细的地方求补充
  8. 人机协同、数据驱动,云时代SOC的演进之路
  9. 霍金撰文探讨如何建造时间机器
  10. 深入浅出MySQL crash safe
  11. DMA与cache一致性的问题
  12. JS易混淆的方法整理
  13. 最好用的五大服装进销存管理软件,强推第一个
  14. RTI_DDS自定义插件开发 10 官方案例
  15. 阿里播放器使用Aliplayer
  16. 虚拟机VMware16安装教程
  17. 偶的流氓老公zt (超搞笑-转)
  18. 12.3.4 UDP网络调试助手实例
  19. 【转载】Python 数据皮尔逊相关性分析
  20. 基于硬件的C(C++)语言程序设计教程5:更改Atmel Studio的语言设置

热门文章

  1. 记录两种搜索遍历算法——BFS和DFS
  2. 百数教培招生管理系统,实现高效数据复盘,提高学员成交率
  3. python深度神经网络文本二分类代码_如何用Python和深度神经网络识别图像?
  4. FCC Part 25.203 卫星地球站站址和频率的选择-协调距离
  5. weapp 构建小程序
  6. 勇敢的女人,永远比懦弱的女人美丽
  7. karen 软件测试_使用Karen的复制器轻松备份数据
  8. TeamViewer v15.1.3937 精简单文件版+便携版
  9. mouseover事件mouseenter事件mouseleave事件和mouseout事件之间的区别与联系
  10. 腾讯微信事业群简单一面