標籤:
繼承是C#的三大特性之一,它實現了多態性和代碼複用
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 ChinesePerson c1 = new ChinesePerson(); 6 c1.name = "任家萱"; 7 c1.SayMyName(); 8 9 //子類可以預設轉換為父類,所以子類可以用來執行個體化父類10 Person p1 = new ChinesePerson();11 p1.name = "田馥甄";12 p1.SayMyName();//這裡執行的是父類(Person)的SayMyName方法13 14 //將父類轉成子類需要強制轉換15 ChinesePerson c2 = (ChinesePerson)p1;16 c2.SayMyName();//這裡執行的是子類(ChinesePerson)的SayMyName方法17 18 //強制轉換的時候必須是有直接繼承關係才能完成強轉否則會出異常19 //object o1 = new object();20 //ChinesePerson t2 = (ChinesePerson)o1; //轉換失敗,出現異常21 //ChinesePerson t3 = o1 as ChinesePerson; //轉換失敗,結果的值是null22 23 //聲明的是父類,執行個體化是子類對象,則這個父類變數可以被強轉為子類對象24 Person p3 = new ChinesePerson();25 ChinesePerson c3 = (ChinesePerson)p3;26 ChinesePerson c4 = p3 as ChinesePerson;27 c3.name = "陳嘉樺";28 c3.SayMyName();29 c4.name = "張宇";30 c4.SayMyName();31 32 //聲明的是父類,執行個體化的是父類對象,則這個父類變數不能被強轉為子類對象33 //Person p2 = new Person();34 //ChinesePerson t2 = (ChinesePerson)o1; //轉換失敗,出現異常35 //ChinesePerson t3 = o1 as ChinesePerson; //轉換失敗,結果的值是null36 37 //錯誤,不能用父類執行個體化子類對象,等號左邊聲明子類變數,文法上可以按變數類型來”.”38 //出變數類型成員使用,但是訪問是在等號右邊堆空間進行的,堆空間父類沒有子類成員,39 //那麼根本就無法訪問40 //ChinesePerson p5 = new Person();41 }42 43 public class Person 44 {45 public string name;46 public void SayMyName() 47 {48 Console.WriteLine("我叫" + name);49 }50 }51 52 public class ChinesePerson : Person 53 {54 public void SayMyName()55 {56 Console.WriteLine("我叫" + name + ",我是中國人。");57 }58 }59 60 }View Code
輸出結果:
C#基礎知識——類的繼承