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.

 
'======
class T
'======
 
float vv
 
method constructor(float a=0) {vv=a}
method destructor    {}
method copy as T     {new T ob : ob<=vv : return ob}
method mA() as float {return vv*2}
method mB() as float {return vv*3}
 
end class
 
 
'======
class S
'======
 
has T
 
method mB() as float {return vv*4} 'ovveride
 
end class
 
'====
'TEST
'====
 
new T objA(10.5)
 
let objB = cast S objA.copy
 
print objA.mb 'result 31.5
print objB.mb 'result 42
 
del objA : del objB
 