1.如果我想彻底覆盖父类的方法,此时可以使用override
.假有classB继承自classA,代码如下:
public class B : A { public bool _flag; public B(bool flag) { _flag = flag; } protected override void Write() { Console.Write("Class B"); } public override void SayHello() { if (_flag) { base.SayHello(); } else { this.Write(); } } } public class A { protected virtual void Write() { Console.Write("Class A"); } public virtual void SayHello() { this.Write(); } }
这个时候实例化classB,打印输出:
static void Main(string[] args){ B b = new B(false); //B b = new B(true); b.SayHello(); Console.ReadKey();}
此时无论传入的flag值是true还是false执行的都是classA的Write()方法。这说明override会覆盖父类的同名方法,相当于被替代了。
2.如果我不想覆盖父类的方法,他们井水不犯河水,可以使用new关键字,显式影藏父类的方法。代码如下
new protected void Write(){ Console.Write("Class B");}
这个时候当flag为true执行的是classA的write()方法;flag为false执行的是classB的方法。