问方法类型和可见性表示符

koushui 2003-09-15 10:09:36
一、静态,虚拟,动态,覆盖
二、private,protected,public,published

请用最简单最易理解的话教一下好吗?谢谢
...全文
37 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawnming 2003-09-15
  • 打赏
  • 举报
回复
我提
cmain83 2003-09-15
  • 打赏
  • 举报
回复
呵呵
我的不是从 JAVA 中得到.
都是 Delphi 的。

从java中得出的概念,delphi得太复杂了,请多多指正。

这一行忘了删除!!!

哈哈
cmain83 2003-09-15
  • 打赏
  • 举报
回复
楼上的不对

静态方法是在声明中参数表后不加 Virtual 或 Dynamic 字符的. 也就是方法的声明默认为静态方法

虚拟方法可以在子类中进行覆盖, 用关键字 Virtual 表示. 在子类中进行覆盖时要加上关键字 Override

动态和虚拟一样,区别在于一个运行时解析,一个编译时解析。

覆盖 Override . 在父类中必须要声明了 Virtual 时才能进行此格式的声明, 否则, 编译出错

Overload 则是重引入. 就是可以声明与父类方法相同的名字, 但要用不同的参数列表或类型.

private 只有自己和友元类可以使用. (友元类: 在同一个PAS文件中声明的所有类全是友元类)
protected 只有自己、友元类和子类可以使用
public 都可以使用
published 是拖放控到窗体上时,可以在设计时进行编辑的属性和事件

从java中得出的概念,delphi得太复杂了,请多多指正。
idilent 2003-09-15
  • 打赏
  • 举报
回复
静态就是类方法,可以通过类调用,而不必建立对象
虚拟就是应该和静态对应吧,必须用对象调用
动态和虚拟一样,区别在于一个运行时解析,一个编译时解析。
覆盖有两种,一种使overload,一种使override,你问得应该是后一种,其实应该叫重载就是子类方法替代父类方法
private只有自己可以使用
protected子类可以使用
public都可以使用
published不知道

从java中得出的概念,delphi得太复杂了,请多多指正。
FrameSniper 2003-09-15
  • 打赏
  • 举报
回复
揭贴吧!
FrameSniper 2003-09-15
  • 打赏
  • 举报
回复
HOHO,我就喜欢这种问题!


一、静态,虚拟,动态,覆盖
答:静态方法就是在联结编译的时候知道方法的入口地址。所以叫静态方法!
虚拟方法使用关键字Virtual,虚拟的主要目的是为了派生类可以对虚拟方法进行覆盖(Oerride)从而实现多态(向上引用)
动态方法使用Dynamic,和虚拟方法基本一致,唯一不同的是,被覆盖的虚拟方法的入口地址将放在VMT中,所以查询速度快,但不节省空间;相反,被覆盖的动态方法的入口地址不放在VMT中,而是放在DMT中,所以虽然节省空间,但查询速度想对被覆盖的虚拟方法慢一些!
覆盖是一个很容易和重载混淆的概念,对于重载(Overload)是和类的多态没有任何关系的,只是一个简单的语言现象,存在的目的就是希望类的方法可以具有同名的功能。而覆盖才是实现多态的关键技术;

二、private,protected,public,published
答:这些都是类的方法的可见性描述符,Delphi的过程和函数分为两种:一种是不属于任何类的方法或函数,Delphi中称其为例程;第二中就是类的成员方法!对于成员方法,其他类和派生类可以对不同的方法进行访问,至于访问权限则是由这些可见性说明符来限制的!至于各种可见性的访问权限楼主可以看看帮助中的说明,很详细!
这里要说明一点的是友类的概念:在同一个单元中申明的类之间互称为友类!友类间的方法成员的可见性是完全透明的....
koushui 2003-09-15
  • 打赏
  • 举报
回复
up?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧