Classes e objetos Delphi (8) -polimorfismo

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 .

 

Acho que você gosta

Origin www.cnblogs.com/fansizhe/p/12723845.html
Recomendado
Clasificación