多态

第七周总结

  多态就是指同一操作作用于不同的对象,会产生不同的结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

  多态性可以是静态的或动态的。

  多态性往往表现为“一个接口,多个功能”。

  静态多态性

  在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C#提供了两种技术来实现静态多态性。

   分别为:

  函数重载

  运算符重载

  动态多态性

  C#允许使用关键字abstract创建抽象类,用于提供接口的部分类的实现。当一个派生类继承自该抽象类时,实现即完成。抽象类包含抽象方法,抽象方法可被派生类实现。派生类具有更重要的功能。

  关于抽象类的一些规则:

不能创建一个抽象类的实例  不能在一个抽象类的外部声明一个抽象方法  抽象类不能被声明为sealed。

  在继承关系中,子类会自动继承父类中的方法,但有时父类的方法不能满足子类的需求,那么可以对父类的方法进行重写。当重写父类的方法,要求子类的方法名、参数类型和参数个数必须与父类方法相同,而且父类方法必须使用virtual关键字修饰,子类方法必须使用override关键字修饰。

  被virtual关键字修饰的方法称作虚方法。

  override关键字:

重写父类中的virtual修饰的方法,实现多态。

  如果父类中的方法在子类中并不适用,那么子类需要自主更改继承的方法或是属性,父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法使用的是override关键字

  定义关键字:虚方法virtual  重写override

  当实例方法声明包含virtual修饰符时,称该方法为虚方法。不存在virtual修饰符时,称该方法为非虚方法。

  对于非虚的方法,无论被其所在类的实例调用,还是被这个类的派生类的实例调用,方法的执行方式不变。而对于虚方法,它的执行方式可以被派生类改变,这种改变是通过方法的重载来实现的。

  注意:子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限,如父类方法的访问修饰符是public,子类的方法就不能使用private修饰。

  隐藏和重写方法的区别: * 如果方法是被隐藏的, 则根据引用类型来调用方法; 如果方法是被重写的, 则根据对象的实际类型来调用方法.

   * 如果想重写方法,需要对方法用virtual和override修饰; 如果想隐藏方法, 需要在子类中的方法用new修饰. (显然这个new和在创造对象时所用的new含义不一样)

   * 如果子类和基类中含有同名(一模一样)的方法(方法体不一定一样, 只是函数头一模一样), 默认情况下是隐藏而不是被重写.

   重载和重写的区别:* 重载的条件:

            1.必须在同一个类中2.方法名必须相同3.参数列表不能相同。

  *重写的条件:

            1. 在不同的类中

            2. 发生方法重写的两个方法返回值,方法名,参数列表必须完全一致

            3. 子类抛出的异常不能超过父类相应的方法抛出的异常

            4. 子类方法的访问级别不能低于父类相应方法的访问级别(public,package,protected, private)

            5.方法体不同

  base关键字:当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法。C#中提供了一个base关键字专门用于在子类中访问父类的成员,例如访问父类的字段、方法和构造方法等。接下来分两种情况来学习一下base关键字的具体用法。

 

转载于:https://www.cnblogs.com/LiangIT12138/p/10686664.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值