Newsgroup: it.comp.java
Titolo: Stesso metodo con argomenti diversi

Ciao a tutti!
Ho un quesito da sottoporvi.
Data
- una classe ClasseA
- una classe ClasseB che estende ClasseA
supponiamo di avere una classe C che ha due metodi aventi lo stesso nome 
(e nessun parametro di ritorno):
public void pluto(ClasseA oggetto) ....
public void pluto(ClasseB oggetto) ....
se ora da qualche parte invoco:
ClasseB mioOggetto = new ClasseB();
pluto(mioOggetto);
mi aspetto che venga eseguito il corpo del secondo metodo:
public void pluto(ClasseB oggetto) ....
che è quello "più specifico"
invece ho fatto una prova e viene sempre eseguito il corpo del primo 
medoto:
public void pluto(ClasseA oggetto) ...
quello "più generale".
Perchè?
Come è possibile imporre l'esecuzione del metodo "più specifico" 
(escludendo la rinominazione dei metodi in plutoA e plutoB) ?
E' possibile definire quanto sto cercando di fare "polimorfismo"?
Grazie per gli aiuti!
Ciao!

 che è quello "più specifico"
Ed infatti è così  ! Ho provato su JDK 1.4x e viene richiamato il metodo 
appropriato
Ciao ReDiCuori
-- 
L'informatica è un' arte
---------------------------------------------------------
 
www.pascallike.too.it
 
http://utenti.lycos.it/pascallike
 il sito sulla programmazione pascal
 sorgenti, tutorial ed utility
------------------------------------------------------------
www.treves-srl.com
Libreria Internazionale Treves
Via Toledo 249/250 Napoli
------------------------------------------------------------
www.alphalibri.com
Vendita ingrosso di libri
Via S.Anna dei Lombardi 10 , Napoli
--------------------------------------------------------- 

 appropriato
Grazie per la risposta che mi è stata di grande aiuto.
In effetti nel descrivere la situazione ho semplificato troppo 
tralasciando un particolare che *credo* sia quello che crea il problema.
Il problema *credo* sia generato dal fatto che ClasseC in realtà estende 
a sua volta una classe astratta ClasseD dove è definito il metodo astratto:
public abstract void pluto(ClasseA oggetto) ...
Quindi se faccio
ClasseB oggetto = new ClasseB();
CalsseD pippo = new ClasseC();
pippo.pluto(oggetto);
in realtà invoco pluto(ClasseA oggetto) ...
Cmq alla fine ho risolto cambiando il nome dei metodi (anche se l'altra 
soluzione era più elegante).
Grazie
Ciao!

Ho rifatto le prove, sperando di aver capito tutte le gerarchie di 
ereditarietà, ho utilizzato un codice molto striminzito giusto per provare, 
vedi se è simile al tuo
public class Untitled1 extends D {
  public Untitled1() {
    this.prova();
    metodo(new a());
    metodo(new b());
  }
  public void metodo(a oggetto){
     System.out.println("CLASSE A");
  }
  public void metodo(b oggetto){
     System.out.println("CLASSE B");
  }
  public static void main(String[] args) {
    Untitled1 untitled11 = new Untitled1();
  }
}
public class a {
  public a() {
  }
}
public class b extends a {
  public b() {
  }
}
public abstract class D {
  public abstract void metodo(a oggetto);
  public void prova(){
    System.out.println("Estendo D");
  }
}
Il risultato è a video è questo
Estendo D
CLASSE A
CLASSE B
quando chiamo metodo(oggetto) viene richiamato quello giusto.


 vedi se è simile al tuo
Sì, è simile al mio.
Non capisco però perchè il mio non funziona.
Proverò nuovamente a lavorare sulla versione precedente (quella senza 
modifiche ai nomi dei metodi) per cercare di capire dove sbaglio.
Un enorme grazie per l'aiuto.
Ciao!