void*랑 dynamic_cast만 있으면 되는 거 아닌가?

class Object {
};

class String : virtual public Object {
};

class Container : virtual public Object {
public:
    int add(Object* o);
    int get(int index);
}

int main() {
   String* str = new String();
   Container con;
   con.add(str);
   String* pStr =  dynamic_cast<String*>(con.get(0));
   ....
   ...
   ..
}

이로써 자바 완성.