黑马程序员技术交流社区

标题: 什么是里氏替换原则? [打印本页]

作者: 资建文    时间: 2012-8-21 08:29
标题: 什么是里氏替换原则?
什么是里氏替换原则?有木有人知道,举例说明一下,谢谢!!!!
作者: xiaqingchao    时间: 2012-11-27 17:14
Person p = new Teacher();
子类可以隐式的转换成父类.

作者: 马海保    时间: 2012-11-28 10:26
里氏替换和多态使用

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());

        }






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2