override什么意思 ( 积分: 10 )

  • 主题发起人 主题发起人 zhongding
  • 开始时间 开始时间
Z

zhongding

Unregistered / Unconfirmed
GUEST, unregistred user!
override什么意思啊,详细点啊!
 
override什么意思啊,详细点啊!
 
重载
重写从父类继承下来的方法就要加上override
 
override用于类方法中,当子类继承了父类的同名同参数方法时使用
用override覆盖的父类方法必须是动态方法或虚拟方法即用virtual
,dynamic注明的方法
 
是重写,和重载没关系。
子类需要重写父类的虚方法或动态方法时使用的关键字
 
to ak_2004:
类方法是静态方法啊//到底哪个类方法?类中的方法是不是,不好意思我咬文嚼字了
不好意思,刚才我说错了,override是覆盖的意思。但是本人一直以来就觉得这个词用的不太好(Java老师也这么说,呵呵)。
Delphi 就是用override 关键字来说明函数覆盖的。被覆盖的函数必须是虚(virtual)的,或者是动态(dynamic)的,也就是说该函数在声明时应该包含这两个指示字中的一个,比如:

procedure Draw; virtual;

在需要覆盖的时候,只需要在子类中用override 指示字重新声明一下就可以了。

procedure Draw; override;

在语法上来说,声明为 virtual和 dynamic是等价的。它们的差别在于,前者在实现上对速度进行了优化,而后者对代码大小进行了优化。

假如基类和子类都含有同一个函数名和参数,并且在子类中不加override 指示字呢?这在语法上也是正确的。这意味着子类的函数同名实现把基类的实现隐藏(hide)掉了,尽管这二者在派生类中都存在。
 
另:
值得注意的是,与我们在C++ 中常常不加区分的把覆盖一个函数和重载一个函数通称为重载不同,在Delphi 中,只有重载(overload) 才是我们平时所说的重载,被重载的函数依然存在,依靠参数来决定到底调用那个实现。当然,当overload掉的函数和基类的函数参数相同时,基类的实现就被hide掉了,就像上面提到的一样。而覆盖(override)则是把让被覆盖的函数不可见了,确确实实的"覆盖"掉了,原来的实现就不见了。
但是许多文章甚至一些书都错误的把override翻译成重载,看来我也被误导了。
 
覆盖吧。
这应该是面向对象很重要的东西,得去看一下书的,要不然开发控件恐怕不可能吧。
 

Similar threads

后退
顶部