{$codepage utf8} {$mode objfpc} Uses sysutils; Type TClassAvion=Class of TAvion; TAvion=class Procedure Despegar;virtual;abstract; End; TAvComercial=class(TAvion) Procedure Despegar;override; Procedure Publicidad; End; TAvCarga=class(TAvion) Procedure Despegar;override; End; Procedure TAvComercial.Despegar; Begin Writeln('Despegando Avion Comercial'); End; Procedure TAvComercial.Publicidad; Begin Writeln('PUBLICIDAD:Vuela aqui y nunca te caeras') End; Procedure TAvCarga.Despegar; Begin Writeln('Despegando Avion Carga') End; Var A:TAvion; Ref:TClassAvion; rpta:byte; Begin ref:=TAvion; Write('Que avion quieres usar [1] Comercial, [2] Carga : ');readln(rpta); Case rpta of 1: ref:=TAvComercial; 2: ref:=TAvCarga; End; A:=Ref.create; try A.Despegar; if ref=TAvComercial then TAvComercial(A).Publicidad else Writeln('Este avion no tiene publicidad') except on EAbstractError do Writeln('No es posible despegar el avion escogido'); end; End.