My top level class is TBaseDB, which has a descendant TCommonDB (, and TCommonDB will have  multiple descendants, like TProdDB and TDevDB).
Let's create a function in each class definition, called Test1. For now, all it does is a ShowMessage('Some literal') just to show me what code is being executed.
I don't know the class type until runtime. I want to have common code, but different behavior.
What I want is something like this:
var
  MyObj: TBaseDB;
begin        
  //pseudo-code...
  if RadioButton1.Checked then
    MyObj := TBaseDB.Create
  else
    MyObj := TCommonDB.create;
  MyObj.Test1;    
end;
I can't seem to get this to work, and I imagine it is in my class definition. How should Test1 be defined so that:
- I can declare my variable as 
TBaseDB, - the created class can be either 
TBaseDBorTCommonDB, and - the proper 
Testprocedure will be called depending on the instance being aTBaseDBorTCommonDB?