Problema Output java

di il
1 risposte

Problema Output java

Salve a tutti, sono nuovo del forum e anche del linguaggio java
vi posto un piccolo e semplice programma che ho svolto come esercizio
//Esercizio 3.a Pagina 91

public class Persona 
{
   public String nome;
   public String cognome;
   public int eta;
   public void dettagli(String a, String b, int c) 
   {
   nome = a;
   cognome = b;
   eta = c;
   System.out.println("Nome = " + a + "\nCognome = " + b + "\nEta = " + c);
   }
   public static void main(String args[])
   {
   
   // Parte 1 dell'Esercizio
   
   Persona dati = new Persona();
   String a = "Mattia";
   String b = "Righetti";
   dati.dettagli(a, b, 17);
   
   // Parte 2 dell'esercizio
   
   Persona persona1 = new Persona();
   Persona persona2 = new Persona();
   persona1.nome = "Marco";
   persona1.cognome = "Donatoni";
   persona2.nome = "Fabio";
   persona2.cognome = "Mazzi";
   persona1.dettagli(persona1.nome, persona1.cognome, 16);
   persona2.dettagli(persona2.nome, persona2.cognome, 15);
   
   // Parte 3 dell'Esercizio
   
   Persona persona3 = persona1;
   System.out.println(persona3);
   }
}
il mio problema sta nella parte 3 dell'esercizio. vorrei che di Output il terminale mi dasse i dati della persona1 come specificato. Invece come output ottengo un risultato strano:
Persona@584479b2 
qualcuno sa spiegarmi perchè accade tutto ciò? grazie mille a chi saprà ripondermi

1 Risposte

  • Re: Problema Output java

    Il motivo è semplice: La println() va a chiamare il metodo toString() dell'oggetto passato come parametro. E' un po' come se tu facessi
    System.out.println(persona3.toString());
    . Dal momento che tu, però, non specifichi nessuna implementazione per tale metodo, la Java Virtual Machine va ad utilizzare quella implementazione presente di default per ogni oggetto. Spiegato in termini più rigorosi, ogni oggetto estende la classe Object, la quale definisce il metodo toString. Se tu non esegui l'override di tale metodo, allora viene utilizzato quello della superclasse (che, appunto, è object). In ogni caso l'implementazione di default di tale metodo è quella che puoi vedere anche tu: "Classe@hash_code".
    Se vuoi stampare le informazioni che interessano a te devi ridefinire tale metodo all'interno della tua classe Persona:
    
    public class Persona {
    
      ....
    
      @Override
      public String toString(){
          return nome+" "+cognome+" "+eta;
      }
    }
    
Devi accedere o registrarti per scrivere nel forum
1 risposte