using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { Chinese c1 = new Chinese("韩梅梅"); Chinese c2 = new Chinese("李雷"); Japanese j1 = new Japanese("树下"); Japanese j2 = new Japanese("田中"); Korea k1 = new Korea("金秀贤"); Korea k2 = new Korea("金秀贤2"); American a1 = new American("科比1"); American a2 = new American("科比2"); Person[] pers = {c1,c2,j1,j2,k1,k2,a1,a2}; for (int i = 0; i < pers.Length; i++) { //if(pers[i] is Chinese) //{ // ((Chinese)pers[i]).SayHello(); //} //else if(pers[i] is Japanese) //{ // ((Japanese)pers[i]).SayHello(); //} //else if(pers[i] is Korea) //{ // ((Korea)pers[i]).SayHello(); //} //else if(pers[i] is American) //{ // ((American)pers[i]).SayHello(); //} pers[i].SayHello(); } Console.ReadKey(); } } public class Person { private string _name;//字段 public string Name//属性 { get{return _name;} set{_name = value;} } public Person(string name)//构造函数 { this.Name = name; } public virtual void SayHello()//方法 virtual 虚方法,这个方法可以被子类重写 { Console.WriteLine("我是人类"); } } public class Chinese:Person { public Chinese(string name):base(name) //调用父类构造函数,外面传进一个name,传给父类一个name { //不用写代码,父类的构造器已经赋值给属性Name } public override void SayHello()//override重写 父类方法 { Console.WriteLine("我是中国人,我叫{0}",this.Name); } } public class Japanese:Person { public Japanese(string name) :base(name) { } public override void SayHello() { Console.WriteLine("我是霓虹人,我叫{0}",this.Name); } } public class Korea:Person { public Korea(string name) :base(name) { } public override void SayHello() { Console.WriteLine("我是棒子人,我叫{0}",this.Name); } } public class American:Person { public American(string name) :base(name) { } public override void SayHello() { Console.WriteLine("我是米国人,我叫{0}",this.Name); } } }