The way I get around these problems is to not use the Abstract keyword

[pascal]
TModel = Class
Procedure Render; Virtual;
Procedure LoadFromFile(FileName : String); Virtual;
End;

Procedure TModel.Render;
Begin
// Empty Method, override to do something useful
End;

Procedure TModel.LoadFromFile(FileName : String);
Begin
// Empty Method, override to do something usefull
End;
[/pascal]

Then the child classes do what they need

[pascal]
TmsaModel = Class(TModel)
Procedure Render; Override;
Procedure LoadFromFile(FileName : String); Override;
End;

Procedure TmsaModel.Render;
Begin
Inherited;
..
Do Something
..
End;

Procedure TmsaModel.LoadFromFile(FileName : String);
Begin
Inherited;
..
Do Something
..
End;
[/pascal]

Then when creating a msa model, but making it compatible with all other models I use the base class and let polymorphism take care of what gets called.

[pascal]
Var
MyModel : TModel;
Begin
// Create it as the child class type I need to use
MyModel := TmsaModel.Create;
MyModel.LoadFromFile('Model.msatype');

//To render
MyModel.Render;
End;
[/pascal]

Because the methods are virtual in the base class but the created type is TmsaModel the TMsaModel methods will be called and not the base methods.

Of course this means that at the base level you need to create stubs for all the methods you will be using later. but remember you can also do this

[pascal]
If MyModel is TmsaModel then
TmsaModel(MyModel).msaMethod;
[/pascal]

To call specific methods for the various types.