public class MyClass {
  public void add(MyClass arg1) {}
}


ClassLoader cl1 = new MyClassLoader();
ClassLoader cl2 = new MyClassLoader();

Class class1 = cl1.loadClass("MyClass");
Class class2 = cl2.loadClass("MyClass");

Object obj1 = class1.newInstance();
Object obj2 = class2.newInstance();

Method m1 = class1.getMethod("add", new Class[] {class1});
m1.invoke(obj1, new Object[] {obj1}); // works
m1.invoke(obj1, new Object[] {obj2}); // throws ClassCastException