Das braucht man zu Beispiel, wenn sich zwei Klassen gegenseitig referenzieren, also in der Definition der Klasse A brauchst du B und in B willst du auch A haben.
Delphi-Quellcode:
type
TA = class;
TB = class
A: TA;
end;
TA = class
B: TB;
end;
Im TB ist schon bekannt wie groß der Zeiger (Variable) auf TA ist, drum kann auch ohne Kenntis des genauen Aufbaus von TA, das TB bereits zusammengebaut werden.
Deshalb geht es auch nur für Klassen und nicht z.B. für Records.
Wenn TB nur in der Implementation auf den Typen TA zugreift, dann wäre das nicht nötig.