Newsgroup: it.comp.java
Titolo: Casting di oggetti

Ciao a tutti. Il mio problema e' il seguente:
Ho un oggetto "Command" classe base e tante altre classi come sue
estensioni.
Ho una variabile Command command, a cui viene assegnata una classe qualsiasi
derivata da Command, il problema e' che quando chiamo un metodo questo e'
quello della classe Command e non quello della classe estesa. L'unica
soluzione che mi e' venuta in mente e' di definire come classe Command come
astratta, cosi' da poter sopperire a questo problema. Voi cosa ne dite

 ha scritto nel messaggio
news:Zk8sc.16972$Wc.6...@twister2.libero.it...

Poniamo in esempio le classi "Command" e "CommandEx" che estende "Command".
Poniamo che tu hai una chiamata di metodo di questo tipo:
Command command;
command.metodo();
Se metodo() è sovrapposto (è stato riscritto) in "CommandEx", verra'
eseguito il codice
in quest'ultima classe.
Se invece metodo() esiste solo in "Command", verra' eseguito il codice nella
classe genitore.
Valerio

 Valerio
Peccato che il metodo che ho riscritto nella classe CommandEx non viene
eseguito, ma viene eseguito il metodo della classe Command. In teoria
dovrebbe eseguire il metodo riscritto, ma non succede cosi'!
Ciao e Grazie
Alan

 dovrebbe eseguire il metodo riscritto, ma non succede cosi'!
Facci vedere un il codice(ridotto ai minimi termini) e vedrai che la spiegazione 
salta fuori subito.. ;)
Marco
-- 
reply: remove duh.spam.
http://javac.imap.cc

 dovrebbe eseguire il metodo riscritto, ma non succede cosi'!
Prova a postare il codice delle due classi..
Valerio

Il codice e' il eguente:
public class Command {
    ...
    private void metodo() {}
    ...
}
public class CommandEx {
    ...
    private void metodo() {
        System.out.println("Ciao");
    }
    ...
}
command.metodo();
Alan

Alan Serpini wrote:

Prova per curiosità a mettere il modificatore final al metodo della 
classe Command, se non hai errori di compilazione vuol dire che il 
metodo esteso non fa correttamente l'overload e (con ogni probabilità) 
ha una signature diversa.
In alternativa, controlla che nel figlio non ci sia una chiamata a 
super.metodo() (Eclipse ad esempio lo mette di default quando estende un 
metodo), se c'è ovviamente viene chiamato *anche* il metodo padre.
Altrimenti hai un java diverso dal mio.

     private void metodo() {}
Non lo mettere privato, se lo devi estendere è chiaro che lo deve vedere 
anche la classe estesa.
Il modificatore corretto è protected.

 Altrimenti hai un java diverso dal mio.
Ho messo final e non mi da' nessun errore in compilazione, come si puo'
aggirare a questo problema? Io penso a dichiarare la classe astratta e il
metodo che chiamo, cosi' "sicuramente" dovrebbe fare bene l'overload.
Ciao Alan

Alan Serpini wrote:

Note that a private method cannot be hidden or overridden in the technical sense 
of those terms. This means that a subclass can declare a method with the same 
signature as a private method in one of its superclasses, and there is no 
requirement that the return type or throws clause of such a method bear any 
relationship to those of the private method in the superclass.
http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#227965


 Il modificatore corretto è protected.
Grazie ho risolto. Tutto per uno stupido errore a cui non avevo fatto caso.
Grazie a tutti
Alan



e dove sarebbe qua l'ereditarieta'?
manca ancora qualcosa, come e' dichiarata e come e' inizializzata command?
-- 
a.a

 Alan
compilando ed eseguendo questo cosa succede?
<!-- B.java -->
class A
{
	public String toString()
	{
		return "A";
	}
}
public class B extends A
{
	public String toString()
	{
		return "B";
	}
	public static void main(String[] args)
	{
		A a = new A();
		System.out.println(a);
		A b = new B();
		System.out.println(b);
	}
}
-- 
a.a

 eseguito il codice
Aspetta aspetta aspetta?
Se ho la classe "Command" e la classe "CommandEx extends Command", con
Command command;
command.metodo();
eseguo il metodo dichiarato in CommandEx?
Alex.
-- 
___________________________________________________________
a p bertolini
(
www.webwarrior.org
)

 eseguo il metodo dichiarato in CommandEx?
Cosě manco te lo compila, se permetti.
Istanzia la variabile, fammi vedere come e ti rispondo.


Appunto, ma dal post di Valerio sembrava di sě. Io ero convinto del
contrario ma, sai com'č, una propria convinzione non necessariamente
corrisponde al vero :-)
