如果子类和父类的方法名参数一样一样,如果我在子类里的相应函数加上overload,好像并不能重载. 
因为好像不能继承父类的同名函数.这是为什么啊.

解决方案 »

  1.   

    如果参数和函数名称都是一样的,你应该是Overrride,
      

  2.   

    父类中的方法声明为虚拟方法 virtual;
    子类中可以重写父类的虚拟方法 override;
    而且子类重写的方法中还可以通过 inherited; 来继承父类的方法VCL中这样的地方比比皆是,这样也正实现了面向对象程序设计的继承和多态
      

  3.   

    重载应该是说在同一个类中可以有同名的方法,但是参数不同,关键字是 overload
      

  4.   

    overload:参数肯定要不同!不然没法overload的!
      

  5.   

    你子类和父类的方法名,参数都一样,那无法OVERLOAD ,需要你的父类的方法申明成virtual or dynamic 然后子类 再 override 这个方法.
    overload 的概念是指同名但参数不同的多个方法.调用这个方法时,编译器根据参数的不同,调用不同的方法.
      

  6.   

    首先,
    重写和重载是两个概念。重写是指子类重写了父类的方法,子类重写父类的方法,需要,1,父类要将该方法声明为virtual,2,子类的重写时需加上override;
    重载,是指同一个类内部的两个或两个以上方法(或者普通函数过过程),它们的名称相同,但参数个数或参数类型或返回值类型不同。这样的函数,需要加上overload标识。其次,按楼主的描述。子类如果有一个与父类相同的方法,如果是重写,需要满足前面讲的两点。如果是重载,其实楼主错了,两个类之间不存在相同方法名的方法的重载。你写了overload跟没写是一样的,此时子类的该方法隐藏了其类的相同方法。举个例子:
    Ta=class
      procedure pro1;
    end;
    Tb=class(Ta)
      proedure pro1
    end;procedure ta.pro1;
    begin
      showmessage('ta');
    end;
    procedure tb.pro1;
    begin
      inherited;//标注1
      showmessage('tb');
    end;
    var
      a: ta;
      b: tb;
    begin
      a := ta.create;
      b := tb.create;
      a.pro1;//输出 'ta'
      b.pro1;//如果标注1那行被注释,输出'tb',否则先输出'ta'再输出'tb'
    end;
    -------------------