一.子類和父類方法之間的關系
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方法調用
修改代碼如下:


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方法");}} }
執行結果:
由此可以知道:重寫以后,調用哪個類的方法取決于實例化的類型(“=”右邊)或者是轉換后最終的類型
?