原文链接来自:面试一点通:http://www.msedt.com/infoflow/details/1094
1. 方法屏蔽
class Pet
{
public void Run()
{
Console.WriteLine("pet walk");
}
}
class Dog : Pet
{
new public void Run()
{
Console.WriteLine("dog walk");
}
}
以如下方式调用Run方法
Dog dog = new Dog();
dog.Run();
得到的结果是dog walk
。
以如下方式调用Run方法
Pet dog = new Dog();
dog.Run();
得到的结果却是pet walk
。
2. 方法重写
class Pet
{
virtual public void Run()
{
Console.WriteLine("pet walk");
}
}
class Dog : Pet
{
override public void Run()
{
Console.WriteLine("dog walk");
}
}
以如下方式调用Run方法
Dog dog = new Dog();
dog.Run();
得到的结果是dog walk
。
以如下方式调用Run方法
Pet dog = new Dog();
dog.Run();
得到的结果还是dog walk
。
3. 方法密闭
- 基类中的方法密闭
如果一个基类不希望子类对它的某个非抽象
方法进行重写,只要在这个方法前面不添加
virtual 就可以。因为派生类要重写基类的方法,这个方法必须是 virtual | override | abstract。由于是非抽象方法,排除 abstract。由于是基类中的方法,排除 override。因此,只要基类中的非抽象方法不添加 virtual,派生类就无法对其进行重写。
- 派生类中的方法密闭
只需要在 被重写的方法前添加 sealed 关键字。注意,在密闭某个派生类方法上 sealed 只能和 override 结合使用,不能单独使用。也就是说只能对重写的派生方法进行密封。
class Pet
{
virtual public void Run()
{
Console.WriteLine("pet walk");
}
}
class Dog : Pet
{
sealed override public void Run()
{
Console.WriteLine("dog walk");
}
}
度一切苦厄,破一切迷惑。