如果子类和父类的方法名参数一样一样,如果我在子类里的相应函数加上overload,好像并不能重载.
因为好像不能继承父类的同名函数.这是为什么啊.
因为好像不能继承父类的同名函数.这是为什么啊.
解决方案 »
- 关于datasnap通讯底层,大家来讨论
- delphi twebbrowser 下载文件的问题
- delphi中什么控件显示摄像头拍摄的内容
- 100分求POSTMESSAGE和HOOK的问题
- 现在比较闲,想找份兼职
- Delphi里有没有像C 里的<表达式1>?<表达式2>:<表达式3>这样的三目运算呀?
- 如何把一個應用程序做成dll,在另一應用程序裡調用它。
- 急!!!我怎样才能将当天新录入的数据(table1)追加到表table2中呢?
- 各位,在下有礼了!承蒙请教我在做切割字符串时怎么判断不是一个汉字的一半?
- 难道这是Delphi的Bug吗?
- delphi调什么数据库可以不用bde,odbc等等,而可以直接用delphi读写,
- 我怎样将图片存入数据库啊 然后我是不是能用dbgrid把图片从数据库中显示出来啊
子类中可以重写父类的虚拟方法 override;
而且子类重写的方法中还可以通过 inherited; 来继承父类的方法VCL中这样的地方比比皆是,这样也正实现了面向对象程序设计的继承和多态
overload 的概念是指同名但参数不同的多个方法.调用这个方法时,编译器根据参数的不同,调用不同的方法.
重写和重载是两个概念。重写是指子类重写了父类的方法,子类重写父类的方法,需要,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;
-------------------