If you're not familiar with class loaders, this may be a tall order. The
SecurityFaq links to a few articles on the subject; I particularly recommend the first one titled "CLASS LOADERS AS A NAMESPACE MECHANISM".
An alternate solution -if you have a limited number of API versions to support- might be to include the API version somewhere in the package name hierarchy. Then the code would explicitly use different classes (representing different API versions) as appropriate.