我在书上经常看到把变量声明为基类,然后引用派生类实例的做法,我不知道为什么要把变量先声明为基类?如果直接声明为实例的类型不行吗?例如:
procddure TForm1.SearchControls(AParent:TWinControl;Tab:string);
var
  ControlObj:TControl;
  WinControlObj:TWincontrol;
  i:Integer;
begin
  for i:=0 to AParent.ControlCount -1 do begin
      ControlObj:=AParent.Controls[i];
      Memo1.Lines.Add(Tab+ControlObj.Name);
      if ControlObj is TWinControl then begin
         WinControlObj:=ControlObj as TWincontrol;
         SearchControls(WinControlObj,Tab+'   ');
      end;
   end;
end;
这是以树状视图的形式将窗体容器控件所包含的控件按包容关系显示出来的方法。
我不明白变量ControlObj为什么要声明为TControl类型,然后再引用TControl的派生类TWincontrol?直接声明为TWincontrol不行吗?