using System;
namespace 多层继承问题
{
class Program
{
static void Main(string[] args)
{
SuperSubDerivedClass superSubDerivedClass = new SuperSubDerivedClass();
SubDerivedClass subDerivedClass = superSubDerivedClass;
DerivedClass derivedClass = superSubDerivedClass;
BaseClass baseClass = superSubDerivedClass;
//输出:
//SuperSubDerivedClass
//SubDerivedClass
//SubDerivedClass
//BaseClass
// 假设如下实例化:则各自调用各自。
SubDerivedClass subDerivedClass = new SubDerivedClass();
DerivedClass derivedClass = new DerivedClass();
BaseClass baseClass = new BaseClass();
// 输出:
//SuperSubDerivedClass
//SubDerivedClass
//DerivedClass
//BaseClass
superSubDerivedClass.DisplayName();
subDerivedClass.DisplayName();
derivedClass.DisplayName();
baseClass.DisplayName();
Console.ReadLine();
Console.WriteLine("Hello World!");
}
}
class BaseClass
{
public void DisplayName()
{
Console.WriteLine("BaseClass");
}
}
class DerivedClass : BaseClass
{
public virtual void DisplayName()
{
Console.WriteLine("DerivedClass");
}
}
class SubDerivedClass : DerivedClass
{
public override void DisplayName()
{
//base.DisplayName();
Console.WriteLine("SubDerivedClass");
}
}
class SuperSubDerivedClass : SubDerivedClass
{
public new void DisplayName()
{
Console.WriteLine("SuperSubDerivedClass");
}
}
}
对于DerivedClass.DisplayName()是虚方法,而SubDerivedClass.DisplayName()是重写了他的派生得最远的成员。
如果使用了New修饰符的SuperSubDerivedClass.DisplayName()将被隐藏。