您的位置:首页 > 其它

一个很好的关于多态的题目

2010-01-20 16:38 239 查看
abstract class BaseClass
{
public virtual void MethodA()
{
Console.WriteLine("Base.A");
}
public virtual void MethodB()
{
Console.WriteLine("Base.B");
}
}
class Class1 : BaseClass
{
public void MethodA(string arg)
{
Console.WriteLine("Class1.A");
}

public override void MethodB()
{
Console.WriteLine("Class1.B");
}
}
class Class2 : Class1
{
new public void MethodB()
{
Console.WriteLine("Class2.B");
}
}

public class Program
{
static void Main(string[] args)
{

Class2 class2 = new Class2();
class2.MethodA();
}
}


看到这个题目,我的反应是

Class1 methodA 隐藏了BaseClass 里的methodA,所以Class2 默认继承了Class1 methodA的方法,所以输出结果是Class1.MethodA

但是这里忽略了 Class1 中methodA的定义:

public void MethodA(string arg)

多了一个参数,相当于是对父类方法的重载。所以Base.MethodA()实际也是被继承过来了。

正确的结果是:

Base.MethodA
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: