zoukankan      html  css  js  c++  java
  • reintroduce与override overload有何区别,怎么使用?

    reintroduce与override overload有何区别,怎么使用? 
        在子孙类中要声明一个与祖先类中参数不同的方法的时候用Reintroduce, 
        但需要重新定义一个祖先类总的虚拟的或者动态的方法的时候,要用到Override;如果祖先类中的方法不是虚拟的或者动态的(定义的时候有virtual;就是虚拟的,有dynamic;就是动态的);那么是没有办法override的 
        至于Overload,一般适用于定义一组不同参数的函数,这些函数也可以不是Of Objects(中文该怎么说?)。 
     reintroduce引入是为了屏蔽父类的一个虚方法,而在子类中生成一个新的方法;overload是为了处理同名的方法有不同的参数而设计的;   
      其实你不使用reintroduce也会覆盖屏蔽父类的方法的但是会产生一个警告,   
      使用了这个关键字,表明你要屏蔽这样不会产生警告

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/honglixx/archive/2008/12/28/3624934.aspx

    -----------------------------------------------------------------------------------------------------------------------------------

    我的理解:

    说白了reintroduce就是Overload的加强版,也就是子类中有由父类中承继的那个方法,这时候要Overload怎么办呢?

    reintroduce!

    type TA=class

      public

         procedure WantedOverload(aValue:integer);

    end;

    type TB=class(TA)

     public

      //这里想要一个WantedOverload函数,但是参数为string类型,咋办呢?

      procedure WantedOverload(aValue:string);reintroduce;

    end;

    注意:

     此时,var b:TB;

     b.wantedOveload(1);则出错,b.wantedOverload('test'),则没问题。

    Delphi Override 和 Overload 的区别

    其实很本质的区别就是看函数特征:覆写(Override)的两个函数的函数特征相同,重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。
    函数特征包括函数名,参数的类型和个数。
    Override 是在继承的时候,如果你写的函数与要继承的函数函数特征相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
    比如:Derived继承了Base,Base里面有void A(int a)
    那么如果你Derived里面觉得A写得不好或不适合这个类,你想重新再写一遍A里的代码,那么就写override void A(int a)这样,原来的那个函数就被你新写的这个覆盖掉了。
    Overload 是重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数。
    比如:void A(int a)和void A(int a,int b)
    如果你用的是A(1)那么调的是第一个,如果是A(1,1)那么调的是第二个
  • 相关阅读:
    Windows如何使用jstack跟踪异常代码
    内存溢出和内存泄漏的区别
    Tomcat 服务器性能优化
    Spotlight on oracle
    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解(转VIII)
    linux下使用yum安装mysql
    MySQL监控系统MySQL MTOP的搭建(转VIII)
    SQL中Group By的使用
    视图
    触发器
  • 原文地址:https://www.cnblogs.com/xunmengyoufeng/p/2964861.html
Copyright © 2011-2022 走看看