Polymorphic class creation in Java and in Delphi:

Java Delphi
Class t[] = {Class1.class, Class2.class}

Class LClass = t[x].newinstance();

type
TCommonClass = class
  constructor Create; virtual;
end;
TCommonClassDesc1 = class(TCommonClass)
  constructor Create; override;
end;
TCommonClassDesc2 = class(TCommonClass)
  constructor Create; override;
end;
TClassType = class of TCommonClass;
var
  T:TClassType;//...
  LCommonClass: TCommonClass;
LCommonClass :=  T.Create;