TBase=class
 public
   function AAA:string;
   function CCC:string;
 end; TA=class(TBase)
 public
   function AAA:string;
   function CCC:string;reintroduce;
 end;
var
  obj:TA;
begin
  obj:=TA.Create;
  ShowMessage(obj.AAA); {TA AAA}
  ShowMessage(TBase(obj).AAA);{BASE AAA}
  ShowMessage(obj.CCC);{TA CCC}
  ShowMessage(TBase(obj).CCC); {BASE CCC}
end;请问CCC后面加了reintroduce有什么不一样???

解决方案 »

  1.   

    当父类的方法为虚拟和动态的方法时,如果在子类中重载一个同名的静态方法,必须在overload前使用reintroduce
      

  2.   

    有时候,需要在派生类中增加一个方法,而这个方法的名称与祖先类中的某个方法名称相同。在   
      这种情况下,没必要覆盖这个方法,只要在派生类中重新声明这个方法。但在编译时,编译器就   
      会发出一个警告,告诉你派生类的方法将隐藏祖先类的同名方法。要解决这个问题,可以在派生   
      类中使用   reintroduce   指示符。   
      

  3.   


      T1 = class(TObject)
        procedure Test(I: Integer); virtual;
      end;
      T2 = class(T1)
        procedure Test(S: string); overload;
      end;但是这样写没有问题,所以我支持3楼的意见,就是为了不让编译器报警而已