关于虚函数Virtual 及 抽象函数Abstract

Virtual
虚函数是多态的前提和保证
被标注为virtual的函数可以被继承类重写(override),并且可以在运行时动态调用相应的方法(多态)。
没有标注为virtual的非虚方法,在继承类中虽然不能通过override重写方法,但是也可以声明一个同名方法的,不过不具备多态的性质!
有两个类如下:

public class SuperClass
{
public void Display()//not virtual
{
Console.WriteLine("I'm super");
}
public virtual void Vdisplay()
{
Console.WriteLine("I'm superVVV!!!");
}
}
public class LowerClass : SuperClass
{
public void Display()//new public void Display();和父类中的方法同名,却不具备多态的性质
{
Console.WriteLine("i'm lower");
}
public override void Vdisplay()//重写了父类中的方法
{
Console.WriteLine("I'm lowerVVV");
}
}

主函数及输出如下:
http://www.cnblogs.com/MayGarden/archive/2010/04/04/1704279.html
static void Main(string[] args)
{
//这里一切正常
LowerClass l = new LowerClass();
l.Display(); //输出:I'm lower
l.Vdisplay();//输出:I'm lowerVVV
//问题在下面:
SuperClass s = new LowerClass();
s.Display(); //输出:I'm super (!!!注意:此处并没有多态的影子,而是直接调用了父类SuperClass的Display()方法)
s.Vdisplay();//输出:I'm lowerVVV
}

Abstract
abstract抽象方法则更像是一个接口(Interface)方法
被标注为abstract的方法不能有具体的实现!
而且如果有方法被标注为abstract, 则这个类需要被标注为abstract
具体关于virtual 和 abstract的区别可以参看:http://www.cnblogs.com/MayGarden/archive/2010/04/04/1704279.html

此条目发表在other分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据