Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    75

    java - rieccomi!!! questa volta ereditarietà

    Salve a tutti:-)

    Scusate la rottura di scatole di questi miei continui messaggi per cose banali, ma sto studiando da sola per collaborare ad un progetto che partirà tra non molto tempo, e se mi blocco (come in questo caso) rischio di restare due giornate impantanata sulla stessa cosa.

    Il problema questa volta è l' ereditarietà. Una classe famiglia, nel quale vengono definiti padre e madre, una classe figli che estende famiglia nella quale definisco figlio e figlia. Solo che alla fine, quando chiedo i nomi di tutti i componenti, mi restituisce solo i nomi dei figli, per padre e madre mette "null", quindi è evidente che non "eredita" come dovrebbe. Dove sto sbagliando?

    public class Famiglia {

    public String padre;
    public String madre;

    public void setGenitori(String padre, String madre) {

    this.padre=padre;
    this.madre=madre;
    }

    public String getPadre() {

    return this.padre;
    }

    public String getMadre() {

    return this.madre;
    }
    }

    class Figli extends Famiglia {

    public String padre;
    public String madre;
    public String figlio;
    public String figlia;

    public void setFigli(String figlio, String figlia) {

    this.figlio=figlio;
    this.figlia=figlia;
    }

    public String getFiglio() {

    return this.figlio;
    }

    public String getFiglia() {

    return this.figlia;
    }

    public void risposta2() {
    System.out.println("Quindi i nomi di tutti i componenti della famiglia sono: " + this.padre+" " + this.madre+" " + this.figlio+ " "+ this.figlia);

    }

    }

    public class FamigliaDemo {

    public static void main(String args[]) {

    Famiglia family=new Famiglia();

    family.setGenitori("Tiziano" ,"Carla");

    Figli sons=new Figli();

    sons.setFigli("Gianni", "Lucia");

    sons.risposta2();

    }

    }

  2. #2
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Credo sia perchè hai scritto:

    codice:
     System.out.println("Quindi i nomi di tutti i componenti della famiglia sono: " + this.padre+" " + this.madre+" " + this.figlio+ " "+ this.figlia);
    Non capisco perchè metti this.padre,this.figlio,etc etc....
    puoi mettere semplicemente padre,figliio,etc,etc,....
    oppure cambia in:
    super.padre e super.madre
    Così dovrebbe andare meglio....
    credo.:gren:
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    75

    ci sono riuscita

    Falso allarme, ci sono riuscita, non avevo impostato nella classe figli anche le variabili per padre e madre!!!

    Hai ragione, sarebbe molto più facile anche per me, ma mi hanno espressamente chiesto di utilizzare set get e variabili, a quanto pare li utilizzano molto...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    75
    set get e metodi...:-)

  5. #5
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    No, allora l'errore è di concetto:
    se figli espande famiglia non devi poi creare due classi, come fai qui:
    codice:
     
    public class FamigliaDemo {
    
    public static void main(String args[]) {
    
    Famiglia family=new Famiglia();
    
    family.setGenitori("Tiziano" ,"Carla");
    
    Figli sons=new Figli();
    
    sons.setFigli("Gianni", "Lucia");
    
    sons.risposta2();
    ma creare solo la classe figli!!
    Tuttavia devi aggiungere il metodo setGenitori(String,String) nella classe figli, ed iniziarizzarla!
    Forse non sono stato chiaro:
    il fatto è che in realtà i figli non sono delle sottoclassi di famiglia!
    E perchè hai messo solo i genitori nella famiglia??
    Credo dovresti fare così:

    1)classe Genitore
    setNome(String)
    setCognome
    2)classe Figlio(Genitore) estende Genitore
    setNome(String)
    importa il cognome del genitore
    3)classe Famiglia
    setFamiglia(){
    new Figlio
    new Genitore
    }
    mostraFamiglia()

    Spero di essermi chiarito...
    Bah
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    75
    si infatti avevo anche sbagliato nel file FamigliaDemo a creare l'oggetto Famiglia, ora è più chiaro il concetto di ereditarietà, anche se mi chiedo se in effetti sia così utile... non va bene lo stesso integrare il codice (in questo caso della classe Famiglia) per aggiungere ciò che manca?

    Magari a livelli diversi da quello base potrà essere anche utile, al momento mi sfugge

    misteri della programmazione?!?

  7. #7
    E grazie e` un pastrocchio!

    codice:
    public class Famiglia
    {
        // campi incapsulati, ma visibili alle classi derivate (e non so per quale progettista IDIOTA anche al package)
    
        protected String padre;
        protected String madre;
    
        public void setGenitori( String padre, String madre )
        {
            this.padre = padre;
            this.madre = madre;
        }
    
        // in questi metodi 'this' e` superfluo
    
        public String getPadre()
        {
            return padre;
        }
        public String getMadre()
        {
            return madre;
        }
    }
    
    class Figli extends Famiglia
    {
        // padre, madre e rispettivi get/set sono ereditati
    
        protected String figlio;
        protected String figlia;
    
        public void setFigli( String figlio, String figlia )
        {
            this.figlio = figlio;
            this.figlia = figlia;
        }
    
        public String getFiglio()
        {
            return figlio;
        }
        public String getFiglia()
        {
            return figlia;
        }
    
        public String toString()
        {
            return "Padre: " + padre + ", Madre: " + madre + ", Figlio: " + figlio + ", Figlia: " + figlia;
        }
    }
    Inoltre ti ricordo che Java si fonda _pesantemente_ su ereditarieta` e polimorfismo. Conta che tutto deriva da Object..

  8. #8
    codice:
    public class Prova4 {
    
    	public static void main(String []args){
    	Figli figli=new Figli();
    	figli.setFigli("Pino","Pina");
    	figli.setGenitori("Maria","Maria");
    	System.out.println(figli);
    	}
    }
    Figli ereditando da Famiglia , non necessita di una riscrittura del metodo setGenitori(),a meno che non debba migliorarlo o cambiargli il funzionamento.
    Volendo potresti scrivere nella classe Figli

    public void setGenitori(String padre,String madre){
    super.setGenitori(padre,madre);
    }

    ma diciamo che non ha senso
    Inoltre l'ereditarietà è utile quando si creano classi astratte che ti dicono come deve essere impostata una classe che eredità da quest'ultima.


    Ciauz
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    75
    Grazie per i consigli,
    ci sto lavorando sopra per focalizzare bene gli argomenti!!!

    Ciao ciao

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    75
    scusa rOx, ma potresti spiegarmi perchè hai deciso di mettere le variabili padre e madre come protected?

    Quale è l'utilità di questa scelta?

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.