Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [Java] Ereditarietà

  1. #1

    java - ereditarietà

    Ciao ho un problemino con java :master:
    Praticamente ho la classe C che è già figlia della classe A.La classe B vorrei fosse un altro genitore della classe C.Pero in java non posso estendere più di una classe, so che si potrebbero utilizzare le interfacce ma non è possibile a quanto ho capito in quanto non devo implementare metodi ma solo ereditarli per usarli.
    Potrei risolvere creando un istanza della classe B nella classe C e utilizzare i metodi però ripeto vorrei solo ereditarli senza creare istanze ecc
    E' fattibile quello che vorrei fare?
    Ciauz

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: java - ereditarietà

    Originariamente inviato da devil1988
    E' fattibile quello che vorrei fare?
    Così come l'hai spiegato no. Java ha solo la ereditarietà singola e basta. Se vuoi "ereditare" qualcosa lo puoi fare da una sola classe.

    Comunque spiega meglio il problema e la tua necessità. Magari il tuo è un cattivo design che si può impostare diversamente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Non so se fa al tuo caso, ma:
    codice:
    public class A{//codice}
    public class B extends A{//codice. B eredita i metodi di A}
    public class C extends B{//codice. B eredita i metodi di A e quindi anche di B}
    Piu' probabilmente pero' potrebbe essere un cattivo design delle classi come suggerito sopra. Prova a descrivere piu' accuratamente il problema.

  4. #4
    codice:
    class A {
      void mA1() {
         istr....
      }
      void mA2() {
         istr....
      }
    }
    class B {
      void mB1() {
         istr....
      }
      void mB2() {
         istr....
      }
    }
    class C extends A, B { /*java non lo permette */
      void mC1() {
         mB1();
         mA2();
         istr....
      }
    }
    volevo fare una cosa del genere come sopra d'esempio in altro modo però consentito da java
    il codice proposto da simo7784 mi sa proprio che potrebbe andare bene
    grazie a tutti ciauz

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da devil1988
    volevo fare una cosa del genere come sopra d'esempio in altro modo però consentito da java
    il codice proposto da simo7784 mi sa proprio che potrebbe andare bene
    grazie a tutti ciauz
    È tutta una questione di "design". Le domanda sono:
    - perché devi avere 2 classi A e B?
    - cosa fanno quei metodi e su cosa operano?

    Non è che puoi fare semplicemente una gerarchia di 3 classi A <-- B <-- C soltanto perché così ti fa comodo avere tutti i metodi di A e B visibili nella classe C!!!!

    Se vuoi seguire questa possibilità, allora dimmi: la classe B è un A??
    La locuzione "è un" (in inglese "is a") serve per descrivere la relazione tra due classi in cui una estende l'altra e quella inferiore può essere "vista" anche come tipo della classe superiore.
    Come a dire, con altri esempii: "un gatto è un animale", "una automobile è un veicolo". O per dirla in Java: un String è un Object.

    Allora ripongo la domanda: il tuo B è un A?? Se si, ok estendi pure. Se no, cambia design perché fa pena!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Scusate ma sono agli inizi con la programmazione OOP.
    Vi spiego cosa voglio fare:
    Sto provando a fare un sistema di gestione messaggi e avvisi generale per una webapp con il framework Struts.
    Siccome non voglio stare in parole semplici a riscrivere sempre le stesse istruzioni in modo ripetitivo per gestire i messaggi allora con questo sistema la classe A(DispatchAction) è genitore della classe B(MessageHandlerAction) che è una DispatchAction e poi ha gli altri suoi metodi per gestire i messaggi. Poi la classe C(TestAction) sarà sempre una DispatchAction e per ogni actionforward devo solo richiamare i metodi della classe B(MessageHandlerAction) per gestire i msg senza bisogno di copiare e incollare codice a manetta.
    Non so il concetto è più chiaro adesso?
    Ciauz

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Certo.
    Ricadi sempre nell'esempio di andbin: A<--B<--C
    Dove C sarà sia una DispatchAction (visto che è il genitore più lontano), che una MessageHandlerAction (da cui deriverà direttamente).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2025 vBulletin Solutions, Inc. All rights reserved.