您的位置:首页 > 编程语言 > C#

C#中子类对父类中虚方法的处理有重写(override)和覆盖(new),他们有什么区别?

2016-03-31 09:50 651 查看
在子类中用override重写父类中用virtual申明的虚方法时,实例化父类调用该方法,执行时调用的是子类中重写的方法;

如果子类中用new覆盖父类中用virtual申明的虚方法时,实例化父类调用该方法,执行时调用的是父类中的虚方法;

示例代码:

/// <summary>
/// 父类
/// </summary>
public class ParentClass
{
public virtual void ParVirMethod()
{
Console.WriteLine("父类的方法...");
}
}

/// <summary>
/// 子类1
/// </summary>
public class ChildClass1 : ParentClass
{
public override void ParVirMethod()
{
Console.WriteLine("子类1的方法...");
}
}

/// <summary>
/// 子类2
/// </summary>
public class ChildClass2 : ParentClass
{
public new void ParVirMethod()
{
Console.WriteLine("子类2的方法...");
}

public void Test()
{
Console.WriteLine("子类2的其他方法...");
}
}


执行调用:

ParentClass par = new ChildClass1();
par.ParVirMethod(); //结果:“子类1的方法”,调用子类的方法,实现了多态

par = new ChildClass2();
par.ParVirMethod();//结果:“父类的方法”,调用父类的方法,没有实现多态


结果:
子类1的方法...

父类的方法...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: