Newsgroup: it.comp.java
Titolo: Java reflection oppure no?

ciao a tutti
ho:
classe A
classe B che estende A
classe C che estende B
ora da C voglio richiamare un metodo di A.
con super.nomeMetodo vado al metodo di B! Per utilizzare quello di A
come devo fare?
qual'è il metodo migliore..con la reflection? se si sapete come si fa?
grazie ciao

 come devo fare?
L'unico modo è delegare B a chiamare il metodo di A.
Ciascuna istanza può invocare i metodi della classe padre tramite
super, ma non può salire più di un livello (super è una
pseudovariabile a visibilità privata).

ho:
classe A
classe B che estende A
classe C che estende B
ora da C voglio richiamare un metodo di A.
con super.nomeMetodo vado al metodo di B! Per utilizzare quello di A
come devo fare?
Penso che la cosa migliore sia "duplicare" il metodo di A: es:
protected void mioMetodoA(int a)
 {
//...
 }
protected void mioMetodoB(int a)
 {mioMetodo(a);}
Poi estendi mioMetodoA, e se ti serve quello originale, richiami mioMetodoB 
(che non è stato esteso). 

avevo pensato anch'io a una cosa del tipo
protected void mioMetodoA(int a)
 {
//...
 }
protected void mioMetodoB(int a)
 {
super.mioMetodoA(a)
 }
//in C
super.mioMetodoB(a)
E' una cosa pulita?
Nel senso la reflection non può essere d'auito e qs è l'unico
modo..?!
grazie per le risposte
ciao:)

avevo pensato anch'io a una cosa del tipo
protected void mioMetodoA(int a)
 {
//...
 }
protected void mioMetodoB(int a)
 {
super.mioMetodoA(a)
 }
//in C
super.mioMetodoB(a)
Attenzione, io penso che cosě non funzioni: quando sei in C, 
super.mioMetodoA(a) č il super di C.mioMetodoA, ovvero B.mioMetodoA, e non 
A.mioMetodoA. Ho anche il dubbio che possa entrare in loop infinito.
A meno che mioMetodoB sia privato, e richiamato da un protected 
mioMetodoB2(a) (ma la mia soluzione precedente mi sembra piů semplice).
Verifica, s'indente, io non ho provato, ma penso che sia cosě. A suo tempo 
avevo avuto problemi analoghi. 

sickness ha scritto:

non lo so se funziona ma...
hai provato super.super.nomeMetodo?

 hai provato super.super.nomeMetodo?
Risparmia di provare.

Mi hanno detto che se si incontrano di questi problemi significa che ci
sono errori strutturali e di analisi.
penso proprio che l'applicazione necessiti di alcune modifiche in certi
punti..
azz

Comunque il modo che citava Marco non ho ben capito come dovrebbe
funzionare.. puoi farmi un esempio veloce?
grazie ciao

 sono errori strutturali e di analisi.
Condivido questa affermazione.
Se hai le tre classi A, B e C e B nasconde un metodo di A, chiamare da
C il metodo nascosto di A significa violare un contratto stabilito da
chi ha progettato B. Insomma, una spece di "anarchia" progettuale :-)

 funzionare.. puoi farmi un esempio veloce?
class uno
 {
  protected void super_super_elenco(int a)
  //questo metodo non viene esteso,
  //quindi rimane inalterato
  //e richiamabile dalle classi figlie
   {
    System.out.println("-----");
    System.out.println("a="+a);
   }
  protected void elenco(int a)
  //questo metodo è quello da estendere
   {super_super_elenco(a);}
  public uno()
   {}
 }
class due extends uno
 {
  protected void elenco(int a)
   {
    super.elenco(a);
    System.out.println("a+1="+(a+1));
   }
  public due()
   {}
 }
class tre extends due
 {
  protected void elenco(int a)
   {
    super.elenco(a);
    System.out.println("a+2="+(a+2));
   }
  public tre()
   {
    System.out.println("Questo è il risultato di elenco:");
    elenco(1);
    System.out.println("Questo è il risultato di super.elenco:");
    super.elenco(1);
    System.out.println("Questo è il risultato di super_super_elenco:");
    super_super_elenco(1);
   }
 }
public class test
 {
  public static void main(String[]args)
   {new tre();}
 }