里氏替换、抽象方法、虚方法

里氏替换原则

  • 子类的对象能够替换其父类

  • 父类对象不能够替换子类

  • 父类的方法都要在子类中实现或者重写

示例:


            List<Persons> listPerson = new List<Persons>();

            listPerson.Add(s1);

            listPerson.Add(s2);

            listPerson.Add(s3);

            listPerson.Add(s4);

            listPerson.Add(t1);

            listPerson.Add(t2);

            listPerson.Add(t3);

            for (int i = 0; i < listPerson.Count; i++)

            {

                listPerson[i].SayHi();

            }

在Person类中定义了抽象方法SayHi,在Student和Teacher类中分别对SayHi进行了重写。将他们都放到list集合中时,他们分别具有不同的类型。

监视listPerson[i]结果显示:

  • 当i=0到3是listPerson[i]的类型是Student

  • 当i=4到6是listPerson[i]的类型是Teacher

这是一个里氏替换的例子,子类会代替父类。

虚方法和抽象方法

抽象方法

方法声明时加上 abstract 关键字,包含抽象方法的类必须是抽象类,因为抽象方法仅仅只有方法的定义(连大括号{}都没有),它必须在子类中进行重写,除非这个子类还是抽象类,由于有这个抽象方法的存在,这个类不能被实例化使用。因而在包含抽象方法的类前也要加上abstract关键字。


        //抽象方法

        public  abstract void SayHi();//后面没有大括号,更没有里面的内容!
  • 仅仅是方法的定义,不能包含方法体

  • 必须在子类中重写override

  • 只能存在于抽象类中

虚方法

方法声明是加上了virtual关键字,与抽象方法不同的是,它提供了一个默认的方法体,其子类可根据自己的需要对其进行重写。如果不重写就会调用默认的方法。


        public virtual void SayHi()

        {

            Console.WriteLine("大家好,我是:{0},今年:{1}岁了!",Name ,Age );

        }
  • 要有方法体,仅仅一个分号也可以

  • 子类中可以重写,也可以不重写

  • 除了不能在密封类中,其他类中都可以

重写 override

在子类中,如果父类中有抽象方法(abstract)或者虚方法(virtual),可以用override对其进行重写。

示例:


        public override  void SayHi()

        {

            Console.WriteLine("同学们好,我是{0},性别{1},年龄{2},工资{3},教龄{4}。",Name ,Gender ,Age ,Salary ,YearOfService );

        }//在Teacher类中对父类Person的SayHi方法重写

面向对象的三大特性

  • 封装

    隐藏内部实现,稳定外部接口

  • 继承

    子类继承父类成员,实现代码复用

  • 多态

    不同子类对同一消息做出不同的反映

is 和 as

is

  • is用于检查对象是否与指定类型兼容

检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false,永远不会抛出异常。

如果对象引用为null,那么is操作符总是返回为false,因为没有对象可以检查其类型。

    if (person[i] is Student)//判断Person集合的某元素是不是Student类型

as

  • as用于在兼容的引用类型之间指向转换

必须是引用类型,不能是值类型。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值