里氏转换
一、概念
1、里氏转换
1)、子类可以赋值给父类
2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
2、子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。
3、
is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null
代码示例:
class Program { static void Main(string[] args) { 1、里氏转换 1)、子类可以赋值给父类:如果有一个地方需要一个父类作为参数,我们可以给一个子类代替 // Student s = new Student(); // Person p =s; Person p = new Student();//s; //string中的join方法就是:如果有一个地方需要一个父类作为参数,我们可以给一个子类代替 //string str = string.Join("|",new string[] { "1", "2", "3", "4" }); //Console.WriteLine(str); //Console.ReadKey(); 2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。 //is的用法 //如果父类p可以转换成Student子类对象。。。。 //if (p is Student) //{ // Student ss = (Student)p; // ss.StudentSayHello(); //} //else //{ // Console.WriteLine("转换失败"); //} //as的用法 //将Student将转为父类对象,如果成功则赋值,如果失败则返回null; Student t = p as Student; t.StudentSayHello(); Console.ReadKey(); } } public class Person { public void PersonSayHello() { Console.WriteLine("我是父类"); } } public class Student : Person { public void StudentSayHello() { Console.WriteLine("我是学生"); } } public class Teacher : Person { public void TeacherSayHello() { Console.WriteLine("我是老师"); } }
示例://创建10个对象 通过一个循环 去调用他们各自打招呼的方法
class Program { static void Main(string[] args) { //创建10个对象 通过一个循环 去调用他们各自打招呼的方法 //Student s = new Student(); //Person p = new Person(); //ShuaiGuo sg = new ShuaiGuo(); //初始化父类,给他赋值长度为10的父类型数组 Person[] pers = new Person[10]; //实例化随机生成1-7的数 Random r = new Random(); //循环将这6个类随机赋值给父类数组 for (int i = 0; i < pers.Length; i++) { int rNumber = r.Next(1, 7); switch (rNumber)//1-6 { case 1: pers[i] = new Student(); break; case 2: pers[i] = new Teacher(); break; case 3: pers[i] = new ShuaiGuo(); break; case 4: pers[i] = new MeiLv(); break; case 5: pers[i] = new YeShou(); break; case 6: pers[i] = new Person(); break; } } //循环输出这父类数组中的值 for (int i = 0; i < pers.Length; i++) { //根据父类中的值判断输出的内容 // pers[i].PersonSayHi(); if (pers[i] is Student) { ((Student)pers[i]).StudentSayHi(); // pers[i].PersonSayHi(); } else if (pers[i] is Teacher) { ((Teacher)pers[i]).TeacherSayHi(); } else if (pers[i] is ShuaiGuo) { ((ShuaiGuo)pers[i]).ShuaiGuoSayHi(); } else if (pers[i] is YeShou) { ((YeShou)pers[i]).YeShouSayHi(); } else if (pers[i] is MeiLv) { ((MeiLv)pers[i]).MeiLvSayHi(); } else { pers[i].PersonSayHi(); } } Console.ReadKey(); } } public class Person { public void PersonSayHi() { Console.WriteLine("我是人类"); } } public class Student : Person { public void StudentSayHi() { Console.WriteLine("我是学生"); } } public class Teacher : Person { public void TeacherSayHi() { Console.WriteLine("我是老师"); } } public class MeiLv : Person { public void MeiLvSayHi() { Console.WriteLine("我是镁铝"); } } public class ShuaiGuo : Person { public void ShuaiGuoSayHi() { Console.WriteLine("我是帅锅"); } } public class YeShou : Person { public void YeShouSayHi() { Console.WriteLine("我是野兽"); } }

浙公网安备 33010602011771号