Newsgroup: it.comp.java
Titolo: Trasformare una superclasse in una sottoclasse

Ciao!
Supponiamo di avere una classe Veicolo e una classe Automobile che 
estende Veicolo.
Supponiamo di avere una variabile veicolo di tipo Veicolo che contiene 
una istanza di Veicolo.
Dopo un po' "ricevo" ulteriori informazioni sul veicolo rappresentato 
nella mia variabile variabile veicolo e "scopro" che si tratta più 
precisamente di una Automobile, e quindi voglio rappresentare questa 
informazione "trasformando" veicolo in un'istanza di automobile.
Qual è il modo più elegante per "trasformare" veicolo in un'istanza di 
Automobile?
Ciao!

 Automobile?
dicesi Cast
...
Automobile lAutomobile = (Automobile)veicolo;
...
cya N
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ...
Sicuro ?

> Sicuro ?
Solo di morire
sorry, prova cosi'
se no devi usare delle interface
Automobile lAutomobile = new Automobile()
lAutomobile.setXXX(veicolo.getXXX())
lAutomobile.seYYY(veicolo.getYYY())
.....


 Ciao!
Se ho ben capito la situazione è questa:
Veicolo v = new Veicolo();
v.setColore("nero");
...
Automobile a = new Automobile();
a = v; // non sai come fare questo?
Soluzione 1)
Implementi un costruttore di Automobile che prenda come parametro un 
Veicolo ed all'interno metti la logica di conversione:
public Automobile(Veicolo v){
   super();
   this.setColore(v.getColore());
   ...
}
a = new Automobile(v);
Soluzione 2)
la logica di conversione la metti esterna all'oggetto:
a = new Automobile();
a.setColore(v.getColore());
...
Spero di averti aiutato.
-- 
mauro

 Sicuro ?
Perché non dovrebbe andare bene?
-- 
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it/imsv/

 a.setColore(v.getColore());
Sì, la situazione era più o meno quella; io avevo pensato alla soluzione 
  1, ma volevo essere certo che non ci fossero soluzioni più eleganti.
Cmq poi per il mio "problema" ho risolto in altro modo (riuscendo ad 
avere da subito l'oggetto nella classe più appropriata).
Grazie
Ciao!

 ...
Il problema è che, come dicevo nel mio primo messaggio, la variabile 
veicolo contiene una istanza di Veicolo, almeno inizialmente.
Come da te indicato, se la variabile veicolo contenesse un oggetto di 
classe Automobile non ci sarebbero problemi e il casting funzionerebbe 
perfettamente; altrimenti invece si rischierebbe un runtime error.
Ciao!

mauro ha scritto:
 > Se ho ben capito la situazione è questa:
 > Veicolo v = new Veicolo();
 > v.setColore("nero");
 > ...
 > Automobile a = new Automobile();
 > a = v; // non sai come fare questo?
 >
 > Soluzione 1)
 > Implementi un costruttore di Automobile che prenda come parametro un
 > Veicolo ed all'interno metti la logica di conversione:
 > public Automobile(Veicolo v){
 >   super();
 >   this.setColore(v.getColore());
 >   ...
 > }
 > a = new Automobile(v);
 >
 > Soluzione 2)
 > la logica di conversione la metti esterna all'oggetto:
 > a = new Automobile();
 > a.setColore(v.getColore());


 Perché non dovrebbe andare bene?
Ah, ok, avevo capito male, ho letto un altro messaggio di t56yt in cui dice
che l'istanza di Veicolo non è un istanza di Automobile come avevo capito.
Ciao
Matteo
