A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 资建文 中级黑马   /  2012-8-21 08:29  /  2956 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是里氏替换原则?有木有人知道,举例说明一下,谢谢!!!!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

3 个回复

倒序浏览
Person p = new Teacher();
子类可以隐式的转换成父类.
回复 使用道具 举报
里氏替换和多态使用

1、里氏替换概述

    1>  概念:

       >继承必须确保基类所拥有的性质在子类中仍然成立

       >子类可以替换父类并且出现在父类能够出现的任何地方,且程序的行为不会发生变化,但是反过来,父类对象是不能替换

               子类对象的

    2> 里氏替换的应用

       对于违反里氏原则的情况,我们需要把原来的两层类扩充为三层类,增加一个中间层把不成立的属性移到这个类中

    3> is和as操作符的使用

       >is操作符用于检查对象和指定的类型是否兼容

       >实例:

              if(empls[i] is SE)

              {

                     //...

              }

       >as操作符主要用于两个对象之间的类型转换

       >实例:

              if(empls[i] is SE)

              {

                     SE se=empls[i] as SE;

              }

       >as关键字也可以用强制类型转换来替代,不同是强制转换如果不成功会报告异常,而as关键字如果转换失败会

        返回null,不会产生异常

2、父类类型作为参数

    1> 概述:

       >当父类类型作为参数时,我们可以将子类作为参数传入

       >多态的第四种体现,在其中传入的是子类对象,这就是消息传递的多态

    2> 实例:

       //父类

       public class FuLei

       {

             public virtual string ShowInfo();

       }

       //子类1

       class ZiLei_1:FuLei

       {

             public override string ShowInfo()

             {

                        return "我是子类_1";

             }

          }

       //子类2

       class ZiLei_2:FuLei

       {

             public override string ShowInfo()

             {

                        return "我是子类_2";

             }

          }

       //form里面

        public void show(FuLei fl)

        {

            MessageBox.Show(fl.ShowInfo());  

        }



        private void button1_Click(object sender, EventArgs e)

        {

            show(new ZiLei_1());

        }



        private void button2_Click(object sender, EventArgs e)

        {

            show(new ZiLei_2());

        }

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马