美文网首页
里氏转换

里氏转换

作者: a04a42f99657 | 来源:发表于2016-12-23 23:51 被阅读93次

    里氏转换,

    1子类可以赋值给父类。
    2如果父类中装的是子类对象,可以将这个父类强转换成子类。
    看看这个例子就能懂。

    namespace 里氏转换
    {
    class Program
    {
        static void Main(string[] args)
        {
            //Student stu = new Student();
            //Person P1 = stu;
            string s = string.Join("|", new string[] { "1", "2", "3", "4", "5" });
    
            //里氏转换,
            //1子类可以赋值给父类
            //实例化一个子类对象
            //Teachaer teach = new Teachaer();
            //声明一个父类对象
            //Person P1;
            //将子类的值赋值给父类
            // P1 = teach;
            //可以简写为
            // Person P2 = new Student();
            //P2.SayHello();
            //如果父类中装的是子类对象,可以将这个父类强转换成子类
            //Student stu2 = (Student)P2;
            //stu2.studentSayHello();
            //一般在转换前做一个判断,判断的关键字为is和as。is的返回值为TURE和FALSE.as关键字,如果可以转换,则返回转换的对象,如果不能转换,则返回null。
    
            // Teachaer t2 = P1 as Teachaer;
            //t2.teacherSayHello();
    
            //if (P1 is Teachaer)
            //{
            //    Teachaer t1 = (Teachaer)P1;
            //    t1.teacherSayHello();
    
            //}
            //else
            //{
            //    Console.WriteLine("转换失败");
            //}
    
            //Console.WriteLine(s);
    
    
            //创建十个对象,通过循环去调用他们打招呼的方式,
            //让他们都继承Person类,创建一个Person类的数组,
            Person[] P = new Person[10];//打招呼要十次,所以创建十个元素的Person数组。
            Random r = new Random();
            
            //通过遍历数组给P赋值
            //先遍历这个数组
            for (int i = 0; i < P.Length; i++)
            {
                int rnubers = r.Next(1, 7);
                //现在这个P数组什么都没有,通过seich循环来给它赋值
                switch (rnubers)
                {
                    case 1:
                        P[i] = new Student();
                        break;
                    case 2:
                        P[i] = new Teachaer();
                        break;
                    case 3:
                        P[i] = new ShuaiGuo();
                        break;
                    case 4:
                        P[i] = new Meinv();
                        break;
                    case 5:
                        P[i] = new YeShou();
                        break;
                    case 6:P[i] = new Person();
                        break;//这样就给P这个数组通过随机数的方法完全赋值了。
                }
                //遍历这个数组,来输出sayhello的方法。
    
            }
            for (int i = 0; i < P.Length; i++)
            {
                //遍历了这个数组 在这个地方如果输出p[i].sayhello的方法的话,会全部输出我是人类,
                //是因为这是一个person类的数组,要通过里氏转化,is或者as转换成子类的对象才可以调用子类中的方法
                if (P[i] is Student)
                {
                    //进行转换
                    ((Student)P[i]).studentSayHello();
                }
                else if(P[i] is YeShou)
                {
                    ((YeShou)P[i]).YeShouSayHello();
                }
                else if(P[i] is Meinv)
                {
                    ((Meinv)P[i]).meiNvSayHello();
                }
                else if(P[i]is Teachaer)
                {
                    ((Teachaer)P[i]).teacherSayHello();
                }
                else if(P[i] is ShuaiGuo)
                {
                    ((ShuaiGuo)P[i]).shuaiGuoSayHello();
                }
                else
                {
                    P[i].SayHello();
                }
            }
            Console.ReadKey();
        }
    }
    class Person
    {
        public void SayHello()
        {
            Console.WriteLine("我是人类");
        }
    }
    class Student : Person
    {
        public void studentSayHello()
        {
            Console.WriteLine("我是学生");
        }
    }
    class Teachaer : Person
    {
        public void teacherSayHello()
        {
            Console.WriteLine("我是老师");
        }
    }
    class Meinv : Person
    {
        public void meiNvSayHello()
        {
            Console.WriteLine("我是美女");
    
        }
    }
    class ShuaiGuo : Person
    {
        public void shuaiGuoSayHello()
        {
            Console.WriteLine("我是帅锅");
        }
    }
    class YeShou : Person
    {
        public void YeShouSayHello()
        {
            Console.WriteLine("我是野兽");
        }
    }
    

    }

    相关文章

      网友评论

          本文标题:里氏转换

          本文链接:https://www.haomeiwen.com/subject/fmllvttx.html