大家来讨论:Delphi中的重载(overload)和覆盖(override)(1分)

  • 主题发起人 主题发起人 cgzhang
  • 开始时间 开始时间
C

cgzhang

Unregistered / Unconfirmed
GUEST, unregistred user!
欢迎参与讨论。
众所周知,Delphi中的重载(overload)有以下三点特征:
(1)所有的方法(method)有相同的名称;
(2)所有方法必须在参数的类型或数量上或两者均各不相同;
(3)函数的返回值不能用来区分重载的方法。

重载可以应用到全局过程(函数)和类方法中,但是在应用到类方法时,
情况变得复杂,原因是另外一个重要的概念“覆盖”(override)很容易和重载
相混淆,让我们看下面的例子:
Type
TAnimal=class
public
procedure voice;
end;

Type
TDog=classz(TAnimal)
public
procedure voice;
end;
在这样的情况下,方法voice到底是覆盖还是重载呢?
其实,这种情况既不是重载也不是覆盖,而仅仅是子类TDog的方法voice
“屏蔽”了父类TAnimal的voice方法,以下的阿代码才是真正的重载了方法voice;
Type
TAnimal=class
public
procedure voice;
end;

Type
TDog=classz(TAnimal)
public
procedure voice:overload;
end;
注意:在类重载中,父类的方法声明可以省略关键字overload。

以下是覆盖(override)的代码:
Type
TAnimal=class
public
procedure voice;virtual;//必须!
end;

Type
TDog=classz(TAnimal)
public
procedure voice;override;//必须!
end;

另外还有其他几种情况:
Type
TAnimal=class
public
procedure voice;virtual;
end;

Type
TDog=classz(TAnimal)
public
procedure voice;reintroduce;overrload;
end;



 
讨论什么?
 
书上说的不清楚?
 
就是,有啥要讨论?
 
接受答案了.
 
后退
顶部