初识c#---多态(方法重载,方法重写,里氏替换原则)抽象,接口

 面向对象的三大特性最后一个:多态
 1.方法重载
 -->同一个方法,不同的行为,参数不同这一特性称之为方法重载,构造函数就是方法重载
 -->方法重载的特点:
    1.方法名必须相同
    2.参数列表不可以相同
    3.如果参数列表相同,那么判断方法重载时就要看参数的类型或者参数的顺序
    4.函数返回值类型不构成判断方法的依据
    5.必须是同一个类中同一个方法的不同实现
2.方法重写
 -->方法重写的特点:
   1.必须是父子关系
   2.需要被重写的方法前面要被声明为虚方法
   3.子类重写父类的虚方法要使用override关键字
   4.一般情况下virtual与override需要成对出现
   5.虚方法可能会被重写(就是子类可以用override也可以不用)
   6.子类重写的父类方法,那么父类的方法一定是虚方法
 -->方法重写的使用场景
   1.多个子类对同一个行为表现出不同的状态时,此时应用重写
   2.虚方法实际上功能已经实现,但是又不是实现的很好,通过重写去完善功能
 -->方法重写需要注意的地方;
   1.子类不能重写父类用sealed修饰的方法
   2.子类不能重写父类用static修饰的方法
   3.如果父类中有abstract修饰的方法时,子类必须重写
   
3.里氏替换原则
 -->LSP:原则上来说子类对象可以赋值给父类对象,也可以说子类替换父类,并且能够出现任何父类出现的地方,反过来说父类对象不能直接替换子类对象,
 这种特性称为里氏替换原则:
 1.子类可以隐式转换为父类
 2.父类必须强转子类(强转只是改变类型,不能改变指针所指的内存)Person p=new LaoWang(); LaoWang p1=(LaoWang)p;
 -->is和as
   as关键字的含义是转换,但是一旦转换失败后,系统会默认给一个NUll值,程序不会报错
   A as B 为真给B的类型,为假给null
   is:询问的意思
   A is B  is作为判断A是不是B类型或者A是不是B类型的子类

      在调用一个对象的方法时,会检查这个对象a2 的类型,首先找到堆中的类型对象指针,通过指针 找到对象a2,查看其是否有该方法,如果没有,则通过类型对象的类型对象指针向上 查找,直到找到该方法为止,然后检查该方法是否为虚方法.如果非虚方法直接调用,如果该方法为虚方法,即有 virtual修饰的方法,则根据变量a2去找对象的实例,查找该方法是否被重写过,如果有,执行.没有则继续向上查找

  抽象类
   关键字--abstract class xxxx:定义一个抽象类
 
  抽象类的作用:限制子类行为

抽象类的特点:
  1.如果抽象类中含有抽象方法,那么方法不可以有实现体,仅仅是个方法声明;
  2.抽象类中的抽象方法,子类在继承该抽象类时,必须重写该抽象方法
  3.抽象方法不能用private修饰
  4.抽象类中不一定含有抽象方法,但是含有抽象方法的类一定是抽象类
  5.抽象类不能new,可以被实例化(利用里氏替换原则)
  6.抽象类中同样可以包含静态成员
  7.virtual不能跟abstract放在一起使用
  8.abstract只能修饰类或者方法.

  接口:接口就是公共契约,
 在c#中使用关键字Interface来声明接口
 接口和类也是同级关系,

 接口的作用:
 1.接口解决了c#中不能多重继承的问题
 2.接口和抽象类一样,都是限制了子类的行为
 
 接口是最纯洁的抽象类 
 接口的命名规范:定义接口,应该以大写的I+功能

接口的特点:
 1.接口不能包含字段
 2.接口中不能带有修饰符
 3.接口中只能有方法的声明不能有实现部分
 4.接口不能new实例化,可以被实例化(利用里氏替换原则)
 5.接口里面所有的成员都是公开的
 6.接口可以声明属性,
 7.接口中的方法声明,不需要加abstract,因为系统会为我们接口中方法声明加上abstract,但是我们不能显示的写出来
 8.接口中可以声明索引器以及委托事件的
 9.子类在继承接口时,不需要在使用override关键字

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值