new是给子类新增加了一个函数,可以说除了函数名字相同以外,它跟基类里面的这个同名函数没有任何关系。当使用子类的类型来调用的时候,它会运行子类中的函数,而如果类型是基类的话,被隐藏的基类函数就会站到前台来。只有使用virtual定义基类中的函数或者abstract定义的抽象方法,并使用override标记子类中的函数,才可以达到想要的多态类。
主函数调用
using
System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
... {
class Human
...{
public virtual void Walk()
...{
Console.WriteLine("Human Walk!");
}
}
class Man : Human
...{
public override void Walk()
...{
Console.WriteLine("Man Walk!");
}
}
class Woman : Human
...{
public new void Walk()
...{
Console.WriteLine("Woman Walk!");
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
... {
class Human
...{
public virtual void Walk()
...{
Console.WriteLine("Human Walk!");
}
}
class Man : Human
...{
public override void Walk()
...{
Console.WriteLine("Man Walk!");
}
}
class Woman : Human
...{
public new void Walk()
...{
Console.WriteLine("Woman Walk!");
}
}
}
Human h1
=
new
Man();
h1.Walk();
Human h2 = new Woman();
h2.Walk();
Woman woman = new Woman();
woman.Walk();
h1.Walk();
Human h2 = new Woman();
h2.Walk();
Woman woman = new Woman();
woman.Walk();