先看个例子:
using System;
namespace tempname
{
public class GrandClass//基类
{
public GrandClass()
{
Console.WriteLine("In GrandClass.Constructor");
}
public virtual void Method()//用virtual才可以在子类中用override,而new不需要这样
{
Console.WriteLine("In GrandClass.Method()");
Console.WriteLine("1");
}
}
public class ParentClass:GrandClass//继承基类,看看override状态
{
public ParentClass()
{
Console.WriteLine("In ParentClass.Constructor");
}
override public void Method()//使用override,是说把基类的方法重新定义
{
Console.WriteLine("In ParentClass.Method() use override");
Console.WriteLine("2");
}
}
public class NewParentClass:GrandClass//继承基类,看看new状态
{
public NewParentClass()
{
Console.WriteLine("In NewParentClass.Constructor");
}
new public void Method()//使用new,不是说用到基类的方法,而是重新定义一个子类方法,只不过,方法名称与基类相同
{
Console.WriteLine("In NewParentClass.Method()");
Console.WriteLine("3");
}
}
public class testclass
{
static void Main()
{
GrandClass gclass = (GrandClass)new ParentClass();
gclass.Method();
GrandClass gclass1 = (GrandClass)new NewParentClass();
gclass1.Method();
NewParentClass NewParent1 = new NewParentClass();
NewParent1.Method();
ParentClass parentClass = new ParentClass();
parentClass.Method();
}
}
}
编译,运行输出
D:/>csc inherit.cs
Microsoft (R) Visual C# .NET 编译器版本 7.10.6310.4
用于 Microsoft (R) .NET Framework 版本 1.1.4322
版权所有 (C) Microsoft Corporation 2001-2002。保留所有权利。
D:/>inherit
In GrandClass.Constructor
In ParentClass.Constructor
In ParentClass.Method() use override
2
In GrandClass.Constructor
In NewParentClass.Constructor
In GrandClass.Method()
1
In GrandClass.Constructor
In NewParentClass.Constructor
In NewParentClass.Method()
3
In GrandClass.Constructor
In ParentClass.Constructor
In ParentClass.Method() use override
2
由上得出两点结论:
1> 使用 new 时并没有隐藏基类的同名方法,只要使用不同的句炳来调用即可证明
2> 使用 override 直接重写了基类的方法,即"覆盖"