覆盖
请看以下代码:
public class A {
public virtual void say() {
Console.WriteLine("i m father");
}
}
public class B : A{
public override void say() {
Console.WriteLine("i m child");
}
}
class Program
{
static void Main(string[] args)
{
B b = new B();
b.say();
A a = new A();
a.say();
a = b;
a.say();
A aa = new B();
aa.say();
}
}
子类B继承基类A,两者都有say方法,当基类A中将say方法声明为virtual虚函数同时子类B中用override覆盖say方法时,运行结果如下:
隐藏
当基类A的say方法去掉virtual修饰,子类B的say方法也去掉override修饰时:
public class A {
public void say() {
Console.WriteLine("i m father");
}
}
public class B : A{
public void say() {
Console.WriteLine("i m child");
}
}
运行结果如下:
当将b对象赋给a时,a并没有使用b的say方法。
更规范应该给B类中的say方法加上new修饰符:
public class A {
public void say() {
Console.WriteLine("i m father");
}
}
public class B : A{
public new void say() {
Console.WriteLine("i m child");
}
}
结果如下: