一.子类和父类方法之间的关系
1.当子类和父类有方法完全相同的方法
namespace ConsoleApplication2 {class Program{static void Main(string[] args){B b = new B();A a = new A();A c = new B();b.Show();a.Show();c.Show();Console.Read();}}public class A{public void Show(){Console.WriteLine("执行A的Show方法");}}public class B : A{public void Show(){Console.WriteLine("执行B的Show方法");}} }
这里先给出运行的结果:
由此可以得出结论:
①当子类和父类的方法完全相同时,调用的时候取决于声明的类型(“=”左边),而不是实例化的类型。
②这样情况应该尽量避免,编译器会警告,但是不会妨碍程序的执行。
③当有同名的字段时,同样使用new来消除警告
可以使用new关键字消除警告,但是运行结果一样。
2.virtural方法和override方法调用
修改代码如下:
View Code
namespace ConsoleApplication2 {class Program{static void Main(string[] args){B b = new B();A a = new A();A c = new B();b.Show();a.Show();c.Show();Console.Read();}}public class A{public virtual void Show(){Console.WriteLine("执行A的Show方法");}}public class B : A{public override void Show(){Console.WriteLine("执行B的Show方法");}} }
执行结果:
由此可以知道:重写以后,调用哪个类的方法取决于实例化的类型(“=”右边)或者是转换后最终的类型