An object is polymorphic when its specific type may vary.
The types a specific value may take, is called class.

It is trivial to copy an object if its type is known:

int x;
int y = x;
Here x is not polymorphic, so y is declared of same type (int) as x.
But if the specific type of x were unknown, then y could not be declared of any specific type.

The task: let a polymorphic object contain an instance of some specific type S derived from a type T.
The type T is known.
The type S is possibly unknown until run time.
The objective is to create an exact copy of such polymorphic object (not to create a reference, nor a pointer to).
Let further the type T have a method overridden by S.
This method is to be called on the copy to demonstrate that the specific type of the copy is indeed S.

      INSTALL @lib$ + "CLASSLIB"
 
      REM Create parent class T:
      DIM classT{array#(0), setval, retval}
      DEF classT.setval (n%,v) classT.array#(n%) = v : ENDPROC
      DEF classT.retval (n%) = classT.array#(n%)
      PROC_class(classT{})
 
      REM Create class S derived from T, known only at run-time:
      RunTimeSize% = RND(100)
      DIM classS{array#(RunTimeSize%)}
      PROC_inherit(classS{}, classT{})
      DEF classS.retval (n%) = classS.array#(n%) ^ 2 : REM Overridden method
      PROC_class(classS{})
 
      REM Create an instance of class S:
      PROC_new(myobject{}, classS{})
 
      REM Now make a copy of the instance:
      DIM mycopy{} = myobject{}
      mycopy{} = myobject{}
      PROC_discard(myobject{})
 
      REM Test the copy (should print 123^2):
      PROC(mycopy.setval)(RunTimeSize%, 123)
      result% = FN(mycopy.retval)(RunTimeSize%)
      PRINT result%
      END