Per quanto riguarda la reflection è un mondo a parte, ti rimando alla documentazione ufficiale di oracle; Per il tuo problema, ti basta usare l'operatore "instanceof" che permette di controllare il tipo a runtime dell'oggetto:
codice:
Vector<Object> vector = new Vector<Object>();
vector.add(new Casa());
vector.add(new Persona());
Object element = vector.get(1);
if(element instanceof Casa)
{
  //cast a casa
}else if(element instanceof Persona)
{
 //cast a persona
}
Ovviamente la seconda soluzione e molto meno elegante e va contro tutti i buon propositi della OOP.