using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using System.Threading.Tasks;
namespace ConsoleApp3
{
class A
{
public virtual void OutPut()
{
Console.WriteLine("输出A");
}
}
class B:A //B继承A
{
public override void OutPut()
{
Console.WriteLine("输出B");
}
}
class C:B
{
}
class D:A
{
public new void OutPut()
{
Console.WriteLine("输出D");
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
A b = new B();
A c = new C();
A d = new D();//使用new关键字,不会重写基类虚方法,仍调用基类虚方法
D d2 = new D();
a.OutPut();
b.OutPut();
c.OutPut();
d.OutPut();
d2.OutPut();
}
}
}
运行结果为:
结果.PNG
可见D里虽然有OutPut(),但没有使用override关键字,结果仍然是"输出A",d2.OutPut才会"输出D"