Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110

    problema set String + ereditarietà

    Buongiorno a tutti,
    il problema di oggi è il seguente: ho una classe bambinoscuola e ho una classe derivata bambinoprecoce che modifica:
    - il metodo getEta per restituire l'attuale età +2
    - il metodo setSaluto per aggiungere la stringa di saluto del bambino + "sono il migliore!"

    Io ho fatto nel seguente modo ma mi da errore per quel che riguarda il setSaluto. Credo mi vada in loop il setMessaggio ma non so come fare altrimenti... Dove sbaglio?
    Grazie!

    Classe BambinoScuola
    codice:
    package ereditarietà;
    
    public class BambinoScuola {
        private String nomebimbo;
        private int eta;
        private String nomemaestra;
        private String saluto;
        
        public BambinoScuola(){
            nomebimbo = "Ancora nessun nome";
            eta = 0;
            nomemaestra = "Ancora nessun nome";
            saluto = "Ancora nessun saluto";
        }
        
        public BambinoScuola(String nomeinizialebimbo, int num, String nomeinizialemaestra, String frasesaluto){
            nomebimbo = nomeinizialebimbo;
            eta = num;
            nomemaestra = nomeinizialemaestra;
            saluto = frasesaluto;
        }
        
        public void setNomeBimbo(String nuovonomebimbo){
            nomebimbo = nuovonomebimbo;
        }
        
        public void setEta(int nuovaeta){
            eta = nuovaeta;
        }
        
        public void setNomeMaestra(String nuovonomemaestra){
            nomemaestra = nuovonomemaestra;
        }
        
        public void setSaluto(String nuovosaluto){
            saluto = nuovosaluto;
        }
        
        public String getNomeBimbo(){
            return nomebimbo;
        }
        
        public int getEta(){
            return eta;
        }
        
        public String getNomeMaestra(){
            return nomemaestra;
        }
        
        public String getSaluto(){
            return saluto;
        }
        
        public void scriviOutput(){
            System.out.println("Il nome del bimbo è: " + nomebimbo);
            System.out.println("L'età del bimbo è: " + eta);
            System.out.println("Il nome della maestra è: " + nomemaestra);
            System.out.println("Il messaggio di saluto è: " + saluto);
        }
    }
    Classe BambinoPrecoce
    codice:
    package ereditarietà;
    
    public class BambinoPrecoce extends BambinoScuola {
    
    
        public BambinoPrecoce(){
        super();
        }
        
        public int getEta(){
            return getEta() +2;
        }
        
        public void setSaluto(String nuovosaluto){
            setSaluto(nuovosaluto + "Io sono il migliore!");
        }
    
    
        public void scriviOutput(){
            System.out.println("Il nome del bimbo è: " + getNomeBimbo());
            System.out.println("L'età del bimbo è: " + getEta());
            System.out.println("Il nome della maestra è: " + getNomeMaestra());
            System.out.println("Il messaggio di saluto è: " + getSaluto());
        }
    
    
    }
    e gli errori che mi escono sono:

    Exception in thread "main" java.lang.StackOverflowError
    at java.lang.StringBuilder.append(StringBuilder.java: 132)
    at java.lang.StringBuilder.<init>(StringBuilder.java: 110)
    at ereditarietà.BambinoPrecoce.setSaluto(BambinoPreco ce.java:14)
    at ereditarietà.BambinoPrecoce.setSaluto(BambinoPreco ce.java:14)
    at ereditarietà.BambinoPrecoce.setSaluto(BambinoPreco ce.java:14)
    at ereditarietà.BambinoPrecoce.setSaluto(BambinoPreco ce.java:14)
    at ereditarietà.BambinoPrecoce.setSaluto(BambinoPreco ce.java:14)
    at ereditarietà.BambinoPrecoce.setSaluto(BambinoPreco ce.java:14)
    at ereditarietà.BambinoPrecoce.setSaluto(BambinoPreco ce.java:14)

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Io ho fatto nel seguente modo ma mi da errore per quel che riguarda il setSaluto. Credo mi vada in loop il setMessaggio ma non so come fare altrimenti... Dove sbaglio?
    A livello teorico il metodo della superclasse lo puoi richiamare con super.setSaluto (String s), ovviamente serve solo se stai ridefinendo il metodo nella classe figlia.
    In questo caso potresti però anche evitarlo, in più modi ...

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    codice:
        public int getEta(){
            return getEta() +2;
        }
    Fatto così è un metodo "ricorsivo" (chiama sé stesso!)

    Mentre invece:

    codice:
        public int getEta(){
            return super.getEta() +2;
        }

    Invoca la versione "super" (nella super-classe) del metodo e aggiunge qualcosa.

    Idem per setSaluto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Doppio post ... scusate, non so perché
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Grazie!

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.