Anzitutto Andbin grazie della risposta.

Quindi è un po come dire :

"siccome il metodo createObject() della classe Creator1 restuisce un oggetto ConcreteObject1 che è un AbstractObject, in maniera implicita questo oggetto verrà "promosso" a tipo AbstractObject. Il fatto che nel codice io abbia scritto in maniera esplicita questo upcating è solo una questione di stile, nel senso che sia che esplicito l'upcasting sia che non lo esplicito a livello di codice, cmq il compilatore mi farà questo upcasting in maniera implicita. I problemi semmai possono nascere nel casting inverso, in quanto ci potrebbe essere una perdita di informazioni".

Giusto?