zoukankan      html  css  js  c++  java
  • 面向对象高级5.3

    本周我们围绕多态来进行的学习,所谓多态就是指同一操作作用于不同的对象,会产生不同的结果。多态可以使程序变得更加灵活,从而有效提高程序的可扩展性和可维护性。实现多态的方式有很多种,重写就是其中的一种。其中有一个知识点:动态绑定。所谓动态绑定就是把派生类的对象,地址赋给基类的引用变量。

    * 多态存在的三个必要条件:

    1.多态以继承为基础--继承。

    2.按照契约形成另一种形态(特殊性)--重写。

    3.父类引用指向子类对象--使用时“动态绑定”。

    * 多态的内在实现机制:

    1.编译器为每一个含virtual关键字的方法构建--Vtrl--虚函数表--存储每个虚方法的首址。

    2.派生类如果改写了(override)方法,则派生类的Vtrl--虚函数表--的虚方法首址将改变,指向新的已经被override的新方法。

    3.动态绑定时,基类的对象引用它绑定的是那个派生类的对象,那么这个基类引用对象就将引用那个派生类的override方法。

    重写父类方法时,要求子类的方法名,参数类型和参数个数必须与父类方法相同,而且父类方法必须使用virtual关键字修饰,子类方法必须使用override关键字修饰,被virtual关键字修饰的方法称为虚方法。

    base关键字是基类的引用,它专门用于在子类中访问父类的成员。它不但可以调用父类的字段和方法,还可以调用父类的构造方法。在c#中可以使用一个父类类型的变量来引用一个子类类型的对象,即将子类对象当作父类类型来使用,这就是所谓的里氏转换原则。这也说明了在继承关系中当子类对象赋值给父类变量的情况下,父类变量也可以通过强制转换指向子类变量。与其相关的还有is和as关键字,它们都可以用来判断父类对象是否指向子类,as关键字除了判断以外,还有直接转换功能。如果判断成功就直接进行类型转换,如果判断失败就返回null。在c#中还提供了一个Object类,它是所有类的父类,即每个类都直接或间接继承自该类。

  • 相关阅读:
    工作总结 vue 城会玩
    vue中,class、内联style绑定、computed属性
    vue-router2.0 组件之间传参及获取动态参数
    vue-router(2.0)
    在v-for中利用index来对第一项添加class(vue2.0)
    机器学习:从入门到沉迷
    探索AutoLayout的本质和解决一些问题
    软件的极简主义
    数组最大差值的最优解法(动态规划)
    项目管理--敏捷开发在项目中使用
  • 原文地址:https://www.cnblogs.com/mwt63/p/10707163.html
Copyright © 2011-2022 走看看