继承是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; //转换失败,结果的值是null 22 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; //转换失败,结果的值是null 36 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 }
输出结果:
原文:http://www.cnblogs.com/lcxBlog/p/4493037.html