Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Comunicazione tra classi

    Ciao a tutti, ho un problema che non riesco assolutamente a risolvere.
    Praticamente vorrei che dalla classe figlia si possano utilizzare metodi e variabili della classe madre.
    Non so se è possibile, in quanto ho girato tutto il web ma non ho trovato nulla di chiaro! Ho sentito parlare di istanze della classe principale ma non ho trovato nessun esempio valido!

    Il mio problema è questo:

    Dalla classe figlia vorrei richiamare il metodo della classe principale che si occupa di terminare l'applicazione, oppure avrei bisogno anche di richiamare il metodo, sempre della classe madre, che si occupa (in j2me) di ridisegnare lo schermo del cellulare.

    Praticamente ho bisogno di rendere visibili i valori delle variabili ed i metodi della classe madre anche anche alla classe figlia.

    Qualcuno mi puo' aiutare??

  2. #2
    Basta che le variabili e i metodi della classe madre siano visibili alla classe figlia, ovvero dichiarate come public o protected.

  3. #3
    Grazie della risposta MadBat87. Il problema che tutte le variabili ed anche la classe principale sono dichiarate public. Dalla classe principale riesco a lavorare con le variabili ed i metodi della classe figlia ma non viceversa!! Non riesco proprio a capire in che cosa sbaglio!!
    Mi puoi fare un esempio??

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Dalla classe principale riesco a lavorare con le variabili ed i metodi della classe figlia ma non viceversa!!
    Cooooosa????

    Diciamo che hai una classe A:

    codice:
    class A
    {
    
      public int num;
      public void writeNum()
      {
        ...
      }
    }
    e una classe B che estende A:

    codice:
    class B extends A
    {
      public String string;
      public void writeStringa ()
      {
        ...
      }
    }
    La classe B vede i metodi e i campi di A (A è madre, B figlia.. mi pare) ma il contrario non è possibile perchè è il linguaggio a vietarlo!

    morale: il tuo problema non è affatto chiaro...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #5
    Secondo me il problema è che nella tua mente hai invertito i ruoli della classe madre e classe figlia

  6. #6
    Allora PASTORE, ti spiego:

    generalmente, quando istanzio delle classi dalla classe principale faccio così:


    CLASSE PRINCIPALE
    ************************************************** *********
    public class PRINCIPALE extends MIDlet
    {
    public int risultato=0;
    public ecc.....

    public FIGLIA figlia=new FIGLIA();

    public void METODO {
    figlia.a=500;
    figlia.b=1000;
    figlia.elabora();
    risultato=figlia.risultato;
    }

    public void pauseApp() {
    ......
    }

    public void destroyApp() {
    ......
    }

    } //chiude la classe principale
    ************************************************** *********

    CLASSE FIGLIA
    ************************************************** *********
    public class FIGLIA
    {

    public int a=0;
    public int b=0;
    public int risultato=0;

    public void elabora {
    risultato=a+b;
    ......
    }
    } // chiude la classe figlia
    ************************************************** *********


    Quindi dalla classe PRINCIPALE riesco tranquillamente a lavorare con variabili e metodi della classe FIGLIA, perchè l'ho dichiarata col costruttore "public FIGLIA figlia=new FIGLIA();"

    Il mio problema nasce quando dalla classe FIGLIA non riesco ad istanziare o a colloquiare con la classe PRINCIPALE.
    Praticamente dalla classe FIGLIA non mi è concesso fare qualcosa di simile:

    "public PRINCIPALE principale=new PRINCIPALE();"

    Praticamente dalla classe figlia non riesco ad istanziare la classe PRINCIPALE, non riesco a richiamare il metodo destroyApp della classe PRINCIPALE.

    Spero di essermi spiegato meglio e scusa se non sono molto pratico...

  7. #7
    Quindi dalla classe PRINCIPALE riesco tranquillamente a lavorare con variabili e metodi della classe FIGLIA, perchè l'ho dichiarata col costruttore "public FIGLIA figlia=new FIGLIA();"
    Ok è solo un problema di terminologia:
    una classe solitamente si dice figlia di un'altra quando estende un'altra classe:
    codice:
    public class Figlia extends Madre
    e non quando è dichiarata e utilizzata all'interno di un'altra classe: in quest' ultimo caso si dice che è un parametro della classe che la utilizza.
    Nel tuo codice l'unico grado di "parentela" è fra MIDlet (madre) e PRINCIPALE (figlia).
    All'interno di PRINCIPALE potrai ovviamente utilizzare tutti i metodi e le variabili public di FIGLIA, ma non quelli protected o private: non puoi però fare il contrario perchè l'oggetto figlia non ha nessun riferimento all'oggetto PRINCIPALE dal quale lei è referenziata.
    Il metodo destroyApp(), non essendo un metodo statico, riguarda le istanze della classe PRINCIPALE e non la classe PRINCIPALE in sè: se fosse stato static avresti potuto chiamarlo da figlia.

    Un modo per poter accedere all'oggetto PRINCIPALE corretto da parte di figlia è passarne il riferimento nel costruttore:
    codice:
    public FIGLIA(PRINCIPALE principale)
    in principale avrai:
    codice:
    public FIGLIA figlia=new FIGLIA(this);
    così poi dall'interno di figlia potrai fare:
    codice:
    principale.destroyApp();
    Conoscere la differenza fra i concetti che ti ho scritto in grassetto è fondamentale - e non banale all'inizio - nella programmazione a oggetti,
    spero di essere stato utile

  8. #8
    Grazie tante MADBAD87, sei stato preziosissimo a farmi capire dei concetti importanti e credo di essermi avvicinato alla soluzione del problema. Ho seguito il tuo consiglio, ma adesso il compilatore mi da il seguente errore:


    ......FIGLIA.java:13:missing method body, or declare abstract
    public FIGLIA (PRINCIPALE principale);


    tu sai il perche'?

  9. #9
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Casino con le parentesi?

    Prova a scrivere il nuovo codice della classe FIGLIA.

    Nota: in java i nomi delle classi hanno l'iniziale maiuscola e stile "cammellato". Quindi Figlia è nello standard.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  10. #10
    probabilmente perchè in PRINCIPALE hai scritto
    codice:
    public FIGLIA figlia=new FIGLIA(this);
    ma in FIGLIA non hai modificato il costruttore da così:
    codice:
    public FIGLIA()
    a così:

    codice:
    public FIGLIA(PRINCIPALE principale)
    ?

    Se non è così prova a postare i pezzi di codice in questione così ci diamo un'occhiata...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.