new 不能“遮挡”父类的方法,使用父类引用调用时,调用父类的方法。
override “遮挡”父类的方法,使用父类引用调用时,调用子类的方法。
using System;
public class Father{
public void func1( ){ Console.WriteLine("Father func1");}
public virtual void func2( ){ Console.WriteLine("Father func2");}
}
public class Child:Father{
public new void func1( ){ Console.WriteLine("Child func1");}
public override void func2( ){ Console.WriteLine("Child func2");}
}
public class MainClass{
static void Main(string[] args)
{
Child c = new Child();
Father f = (Father)c;
f.func1();
f.func2();
}
}
结果:
Father func1
Child func2
override “遮挡”父类的方法,使用父类引用调用时,调用子类的方法。
using System;
public class Father{
public void func1( ){ Console.WriteLine("Father func1");}
public virtual void func2( ){ Console.WriteLine("Father func2");}
}
public class Child:Father{
public new void func1( ){ Console.WriteLine("Child func1");}
public override void func2( ){ Console.WriteLine("Child func2");}
}
public class MainClass{
static void Main(string[] args)
{
Child c = new Child();
Father f = (Father)c;
f.func1();
f.func2();
}
}
结果:
Father func1
Child func2
浙公网安备 33010602011771号