类是单继承的  也就是说  一个类只能继承一个父类
里氏转换两句话
1.子类可以赋值给父类
其实就是  子类继承了父类的方法 可以直接调用
不存在转换的问题

            Person p = new Person("person", 18, '中');
   Student s = new Student("student", 19, '男', "打豆豆");
            p.PersonSay();
            p = s;
            s.PersonSay();    //可以直接调用父类的方法,给子类进行赋值
            s.StudentSay();   //自己的方法 


2.如果父类中装的是子类对象  那么可以将这个父类强制转换为子类
            //Person p = new Student("student",18,'男',"打豆豆");
            //Student st = (Student)p;   //父类强转为子类   也可以理解为 通过第三方st 吧父类的能力付给了st 同时 st也具有子类的功能

            //st.PersonSay();  
            //st.StudentSay(); 

子类可以隐式的转换为父类  但是 子类不可以再转换成其他的子类

练习题

            //写一个person 类 再随意的写5个类 都继承与person 并且这六个类都有属于自己打招呼的方法 
            //            写一个长度为10 的Person数组  循环这个数组
            //            根据随机数  生成1-7之间的数字
            //            每个数字都代表产生不同的类型  最后 循环的输出它们打招呼的方法
   
   
            Person[] person = new Person[10];
            Random r = new Random();
            for (int i = 0; i < person.Length; i++)
            {
                int number = r.Next(1, 7);
                switch (number)            //在switch当中进行里氏转换
                {
                    case 1: person[i] = new Person();
                        break;
                    case 2: person[i] = new Stiter();
                        break;
                    case 3: person[i] = new Student();
                        break;
                    case 4: person[i] = new Teacher();
                        break;
                    case 5: person[i] = new XiGe();
                        break;
                    case 6: person[i] = new YeShow();
                        break;
                }
            }

            for (int i = 0; i < person.Length; i++)
            {
                ZhuanHuan(person[i]);
            }
            Console.ReadKey();

 

 

 

        }
        ///
        /// 进行里氏转换的判断
        ///
        ///
        public static void ZhuanHuan(Person p)  //传进来person类型的元素  然后 在这里边进行里氏转换类型的判断
        {
            if (p is Stiter)
            {
                ((Stiter)p).Stiter1();
            }
            else if (p is Student)
            {
                ((Student)p).student1();
            }
            else if(p is Teacher)
            {
                ((Teacher)p).Teacher1();
            }
            else if (p is XiGe)
            {
                ((XiGe)p).Xige1();
            }
            else if (p is YeShow)
            {
                ((YeShow)p).Show();
            }
            else
            {
                ((Person)p).Person1();
            }


        }

posted on 2014-03-31 23:01  Fighting二零一四  阅读(103)  评论(0编辑  收藏  举报