b := a; <--- Warum ist diese Zuweisung nicht möglich
B ist zwar Nachfahre von A, aber da B als Nachfahre unter Umständen neue/zusätzliche Funktionalitäten besitzen kan, ist es nur andersrum möglich
also A := B; geht, da der Typ A alle Funktionen enthält, welche B auch hat.
PS:
Delphi-Quellcode:
B := TClassB.Create;
B.Print > TClassB.Print
A := B;
A.Print > TClassA.Print
A := TClassB.Create;
A.Print > TClassA.Print
hier wäre wohl Virtual+Override angebracht
Delphi-Quellcode:
B := TClassB.Create;
B := A;
hierzu wurde zwar schon etwas gesagt, aber es wurde eventuell nicht klar erwähnt, daß du hiermit ein MemoryLeak erstellst
eine Instanz von TClassB wird erstellt und dann der Instanzvariable B eine andere Instanz zugewiesen, wobei die erstellte Instanz dann frei im Programm rumschwirrt und nicht freigegeben wird.