class Program
{
static void Main(string[] args)
{
//p1 p = new p1(); p.Show();//输出p1.Show();
//p1 p = new p2();p.Show()输出p2.Show();
//p1 p = new p3();p.Show()//输出p3.Show();
//而子类用new关键字隐藏了父类的普通方法
p2 p = new p2();
p.Write();//输出这是p2的普通方法
p2 p2 = new p3();
p2.Write();//还是输出这是p2的普通方法
//请注意:
p3 p3 = new p3();
p3.Write();//这里输出的是p3里面用new关键字隐藏的方法p3.Write();
//调用子类用New关键字修饰(new 可隐藏)的父类普通方法,看=号左边的是子类还是父类,
//如果是=号左边是父类,则调用父类的方法,如果是子类,则调用子类的方法。
Console.ReadKey();
}
}
class p1
{
public virtual void Show()
{
Console.WriteLine("这是p1.Show()");
}
}
class p2 : p1
{
public override void Show()
{
Console.WriteLine("这是p2重写p1.Show()");
}
public void Write()
{
Console.WriteLine("这是p2的普通方法");
}
}
class p3 : p2
{
public override void Show()
{
Console.WriteLine("这是重写的p2.Show()");
}
public void Write()
{
Console.WriteLine("这是p2的方法,该方法与p2.Write()重名,是p3默认用new关键字修饰的方法,不是方法重写,而是隐藏父类的Write()");
}
} |