Hi, See the code below. My question is: Why the cast worked, considering the c variable is a TAClass instance, not a TBClass.
------------- program Project1; {$mode objfpc}{$H+} uses Classes, SysUtils; type TAClass = class protected FInfoA: string; public constructor Create; end; TBClass = class(TAClass) protected FInfoB: string; public function GetInfoA: string; function GetInfoB: string; end; { TAClass } constructor TAClass.Create; begin FInfoA := 'TAClass info'; end; { TBClass } function TBClass.GetInfoA: string; begin Result := FInfoA; end; function TBClass.GetInfoB: string; begin Result := FInfoB; end; var c: TAClass; s: string; begin c := TAClass.Create; try // The c is a TAClass, not a TBClass instance! // but worked... WHY?! s := TBClass(c).GetInfoA; writeln(s); // Now I got an AV... ok for me. writeln(TBClass(c).GetInfoB) finally c.Free; end; writeln('Done'); end. Marcos Douglas _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal