04封装 里氏转换 多态

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _04封装
{
    class Program
    {
        static void Main(string[] args)
        {
            //封装的作用:1.减少了大量的冗余代码
            //            2.将一堆难以理解的功能封装起来,但对外提供了一个简单的使用接口,属性封装的是字段
            //继承的作用:1.减少了类中的冗余代码
            //            2.让类与类之间产生了关系,为多态打下了基础,多态中把子类赋值给父类
            //继承的特性:1.单根性:一个子类只能有一个父类
            //            2.传递性:爷爷类 父类 子类 往下继承
            //            3.里氏转换:子类可以赋值给父类,如果父类中装的是子类对象,则可以将这个父类转换为对应子类对象

            //子类赋值给父类,person只能调出父类的对象
            Person person = new Student();

            //里氏转换  is  as : 如果要调出子类对象,需要使用下面关键字,不会抛出异常

            //强制转换,语法没错,继承出错,抛出异常
            //Teacher t = (Teacher)person;
            //t.TeacherSay();

            // is:返回bool类型,指示是否可以转换
            // as:如果转换成功,则返回对象,否则返回null

            //if (person is Teacher)
            //{
            //    ((Teacher)person).TeacherSay();
            //}
            //else
            //{
            //    Console.WriteLine("转换失败");
            //}

            Student s = person as Student;//将person转换成student对象

            if (s !=null)
            {
                s.StudentSay();
            }
           
            //为什么要用里氏转换:可以把十个子类都赋值给父类,把子类对象当作父类来看。针对父类进行编程,写出通用代码,适应需求的变化,这个也是多态的作用。

            //多态的作用:1.虚方法    virtual overwrite
            //            2.抽象类    abstract overwrite
            //            3.接口      interface

            // 多态就是指不同对象(对象之间可以有关系--虚函数、抽象类来实现多态,也可以没有关系--使用接口实现多态)收到相同消息时,会产生不同行为,同一个类在不同场合下表现不同的行为特征(父类可以调用不同子类的函数)。
            // 多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,可写出通用代码,适应需求的变化。

            // private 当前类中访问,默认修饰符
            // protected 类及子类访问,继承中使用
            // internal 当前程序集中使用
            // protected internal 当前程序集或子类中,或不同程序集中
            // public 任何地方


            Console.ReadKey();


        }
        //里氏转换:子类可以赋值给父类
        class Person
        {
            public void PersonSay()
            {
                Console.WriteLine("我是父类");
            }
        }
        class Student : Person
        {
            public void StudentSay()
            {
                Console.WriteLine("我是学生");
            }
        }
        class Teacher :Person
        {
            public void TeacherSay()
            {
                Console.WriteLine("我是老师");
            }
        }

    }
}

 

转载于:https://www.cnblogs.com/andu/p/6132930.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值