Pues sí, la verdad es que el ejemplo que puse es muy poco afortunado.

Intenté simplificarlo y lo simplifiqué tanto que me pasé. Intentaré explicarlo mejor:
Código Delphi
[-]TYPE
TBASE = CLASS (TOBJECT)
PUBLIC
PROCEDURE Procedimiento; VIRTUAL;
END;
TDERIVADA = CLASS (TBASE)
PUBLIC
PROCEDURE Procedimiento; OVERRIDE;
END;
PROCEDURE Uso (aObjeto: TBASE);
BEGIN
aObjeto.Procedimiento;
END;
VAR
ElObjeto: TBASE;
BEGIN
ElObjeto = TDERIVADA.Create;
ElObjeto.Procedimiento;
Uso (ElObjeto);
ElObjeto.Free;
END
En este ejemplo, dentro como fuera del procedimiento
Uso se llama al método
Procedimiento definido en la clase TDERIVADA. Esto es porque en TDERIVADA existe un único método con el nombre
Procedimiento. Si no entiendes porqué, deja de leer y busca una explicación sobre la herencia y programación orientada a objetos.
En otro caso, seguimos con otro ejemplo:
Código Delphi
[-]TYPE
TBASE = CLASS (TOBJECT)
PUBLIC
PROCEDURE Procedimiento; VIRTUAL;
END;
TDERIVADA = CLASS (TBASE)
PUBLIC
PROCEDURE Procedimiento; REINTRODUCE;
END;
PROCEDURE Uso (aObjeto: TBASE);
BEGIN
aObjeto.Procedimiento;
END;
VAR
ElObjeto: TBASE;
BEGIN
ElObjeto = TDERIVADA.Create;
ElObjeto.Procedimiento;
Uso (ElObjeto);
ElObjeto.Free;
END
En este segundo ejemplo, fuera del procedimiento
Uso llama al método
Procedimiento definido en la clase TDERIVADA mientras que dentro de
Uso llama al definido en TBASE a pesar de que el objeto es de clase TDERIVADA. Esto es porque en TDERIVADA existen 2 métodos con el nombre
Procedimiento: El heredado de TBASE y el re-definido (es decir, "re-introducido") en TDERIVADA.
Si no entiendes cuándo utilizar REINTRODUCE u OVERRIDE, entonces deberías utilizar siempre OVERRIDE y, si el compilador muestra algún error, estudiar el porqué aparece el error y solucionarlo (sin utilizar REINTRODUCE, se entiende).
[edit]Cambié un poco los ejemplos para que fuera más claro (o eso creo

)