C#学习笔记-继承、多态、里氏替换原则(二)

前文链接https://blog.csdn.net/qq_39157152/article/details/113347386

三、里氏替换原则

里氏替换原则(Liskov Substitution Principle,简称LSP): 子类可以替换父类。父类变量接收子类对象,接口变量接收接口实现类的对象。

注意:当使用父类类型的时候,子类特有的行为和属性会被屏蔽。

应用场合示例:程序的启动入口、窗体的Controls集合等。

子类独立使用的示例:窗体、控件、自定义控件等

        static void Main(string[] args)
        {
            Person student = new Student()
            {
                Name="张三",
                IdNo="1001"
            };
            Person teacher = new Teacher("李文","1102","男");
            Student mstudent = new MStudent()
            {
                Name = "李想",
                IdNo = "1002"
            };
            Test(student);
            Test(teacher);
            Test(mstudent);
            mstudent.SayHI();
            Console.ReadKey();
        }
        /// <summary>
        /// 多态实现的形式1:父类作为参数传递,通过里氏替换原则原则,实际传递的是不同的子类对象
        /// </summary>
        /// <param name="person"></param>
        public static void Test(Person person)
        {
            string result=person.GetInfo();
            Console.WriteLine(result);
            person.Sleep();
            person.Running();
            person.Swimming();
            person.Dowork();
            Console.WriteLine("***************************************");
            Console.WriteLine("***************************************");
        }

四、多态

多态本质是根据OPP中的依赖倒置原则的面向抽象编程的特性。

抽象编程(可以使用父类就是用父类,能用接口就用接口)。

多态实现的两种方式

1、多态的实现1:把父类对象作为参数,实际窗体是子类对象,调用是会转到具体实现的子类中。

   应用示例:程序的启动入口、窗体的Controls集合。

2、多态的实现2:把父类对象作为返回值,实际返回的是子类对象

  应用示例:简单工厂、抽象工厂等设计模式中

         /// <summary>
        /// 多态实现的形式1:父类作为参数传递,通过里氏替换原则原则,实际传递的是不同的子类对象
        /// </summary>
        /// <param name="person"></param>
        public static void Test(Person person)
        {
            string result=person.GetInfo();
            Console.WriteLine(result);
            person.Sleep();
            person.Running();
            person.Swimming();
            person.Dowork();
            Console.WriteLine("***************************************");
            Console.WriteLine("***************************************");
        }
        /// <summary>
        /// 多态实现的形式2:父类作为返回值,实际传递的是具体的子类对象
        /// </summary>
        /// <returns></returns>
        public Person GetPerson()
        {
            return new Teacher();
        }

接口多态3:接口类型作为参数,实际传递是具体实现的接口对象,调用时调用具体对象的接口行为,这个对象继承的其他特性或自有的特性会被屏蔽掉。

接口多态4:接口类型作为返回值类型,实际返回的是具体实现的接口对象,返回对象在被调用时,返回对象的继承的其他特性或自由有的特性会被屏蔽掉。

本文Demo链接:https://download.csdn.net/download/qq_39157152/14950548

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值