方法的重写(override)
父类中方法用virtual修饰,子类中方法用override修饰,构成了方法的重写,子类函数成员对父类函数成员的版本更新。此时函数的行为是由对象决定的,即实现了多态。
class Program
{
public static int pi = 12;
static void Main(string[] args)
{
Person chinese = new Chinese();
chinese.say();//打印出:中国人
Console.ReadKey();
}
}
class Person//父类
{
public virtual void say()
{
Console.WriteLine("人类");
}
}
class Chinese : Person//Chines是子类
{
public override void say()
{
Console.WriteLine("中国人");
}
}
方法的覆盖
父类和子类中具有相同的函数时,在子类中会将父类的方法隐藏。若仍使用父类引用创建子类对象时,会调用父类的方法,这时不是多态。尽量避免这种情况。
class Program
{
public static int pi = 12;
static void Main(string[] args)
{
Person chinese = new Chinese();
chinese.say();//打印出人类
Console.ReadKey();
}
}
class Person//父类
{
public void say()
{
Console.WriteLine("人类");
}
}
class Chinese : Person//Chines是子类
{
public void say()
{
Console.WriteLine("中国人");
}
}
重写的条件
- 方法成员(方法、属性等)
- 方法可见(protected public)
- 方法签名一致