Primeiro, entenda brevemente o seguinte exemplo:
O que é um multi-estado o meu entendimento é: a mesma forma, haverá diferentes implementações em diferentes objetos onde nada ?. Unidade Unit1; Interface usa o Windows, as mensagens, os SysUtils, variantes, as Classes, gráficos, controles, formulários, Diálogos, StdCtrls; tipo TForm1 = classe (TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click (Sender: TObject); procedure Button2Click (Sender: TObject); procedure Button3Click (Sender: TObject); end ; / / Três classes são definidas, as duas últimas herdam da primeira classe TBass TBass = alerta de procedimento de classe ; virtual; { Além da diretiva virtual, indicando que esse método pode ser modificado (ou chamado de substituição) } { este método é chamado de método virtual } fim ; TChild1 = alerta de procedimento de classe (TBass) ; substituição ; { substituição significa modificar o mesmo nome da classe pai Método } end ; TChild2 = alerta de procedimento de classe (TBass) ; substituição ; end ; var Form1: TForm1; implementação { $ R * .dfm } { TBass } procedimento TBass.alert; begin ShowMessage ( ' is Bass ' ); { mesmo método, implementações diferentes em diferentes classes } final ; { TChild1 } procedimento TChild1.alert; começa ShowMessage ( ' is TChild1 ' ); { mesmo método, em diferentes classes Existem implementações diferentes } end ; { TChild2 } procedure TChild2.alert; begin ShowMessage ( ' is TChild2 ' ); {o mesmo método, existem implementações diferentes em diferentes classes } end ; // Teste 1: procedureTForm1.Button1Click (Remetente: TObject); var bass: TBass; { variável definindo TBass } begin bass: = TBass. Create ; bass.alert; { is Bass } bass.Free; end ; // Teste 2: procedimento TForm1. Button2Click (Remetente: TObject); var bass: TBass; { Observe que ainda definem as variáveis do TBass } begin bass: = TChild1. Create ; { Mas aqui é para criar um objeto através do TChild1 } bass.alert; { is TChild1 } bass.Free; fim ; // Teste 3: procedimento TForm1.Button3Click (Remetente: TObject); var bass: TBass; { observe que ainda definem as variáveis do TBass } begin bass: = TChild2. Create ; { mas aqui está o objeto criado por TChild2 } bass.alert ; { is TChild2 } bass.Free; end ; { Resumo: Agora, o mesmo é o método bass.alert, através da realização de objetos diferentes, com funções diferentes, este é o polimorfismo! } end .