If application need only check new version existance, then
load new version, and restart it's simple.
But if you want to update it without restart application, it's
difficult - really I don't know how you can UNLOAD class, and
the LOAD it (new version) again.
But I think exists other way.
For example you don't change interface to use some class, than
make all calculation, and wish to change it without reload
application.
So you can call previous version of class
using reflection, and for example previous class name was
Calc_v100.
Now you have Calc_v101. You copy it into your classpath.
So you can pause calculation

, and create new instance of
class Calc_v101 (using reflection), and continue to use the
updated module.
If obsolete class and new class implements the same interface,
or overload the same base class, it can work (in some JVM)