La superclassa universale Object
Sappiamo già che ogni classe di Java è (in maniera diretta o indiretta) sottoclasse di Object. Quindi ogni classe di Java eredita tutti i metodi della classe Object. Alcuni dei più utili metodi di Object sono i seguenti: sovrascriverli. Ma perché siano davvero utili, nella maggior parte dei casi bisogna sovrascrivere i metodi toString e equals.
toString
Sovrascrivere public String toString()
Il metodo della classe Object ha la firma: il metodo println di qualsiasi tipo è in grado di ricevere come parametro un oggetto perché invocato String dell’oggetto, e l’invocazione è possibile perché tutte le classi hanno il metodo toString, eventualmente ereditato da Object. L’invocazione di questo metodo per qualsiasi oggetto ne restituisce la descrizione testuale standard: il nome della classe seguito dal carattere @ e dallo hashcode dell’oggetto (un numero univocamente determinato dall’indirizzo in memoria dell’oggetto stesso).
In generale la descrizione testuale standard non è particolarmente utile, è più utile ottenere una stringa di testo contenente informazioni sullo stato dell’oggetto in esame. toString dovrebbe sempre produrre una stringa contenente tutte le informazioni di stato dell’oggetto:
- Il valore di tutte le sue variabili di esemplare
- Il valore di variabili statiche non costanti della classe
Secondo lo stile adottato nella libreria standard, crea una stringa contenente il nome della classe seguito dai valori dei campi di esemplare racchiusi fra parentesi quadre.
Sovrascrivere toString anche per le sottoclassi
Per vedere stampato il nome di classe corretto si può usare il metodo getClass, che restituisce un oggetto di tipo classe e poi invocare il metodo getName sull’oggetto di tipo classe, per ottenere il nome della classe, così verrà visualizzato il nome corretto della classe anche quando viene invocato su un oggetto di una sottoclasse. Se si vogliono visualizzare i valori dei campi di esemplare di una sottoclasse bisogna invocare super.toString per ottenere i valori dei campi della superclasse.
equals
Sovrascrivere public boolean equals(Object otherObject)
Il metodo della classe Object ha la firma: l’invocazione di questo metodo restituisce true se gli hashcode dell’oggetto this e dell'oggetto otherObject sono uguali. Però è più utile ottenere un'informazione booleana che dica se gli stati degli oggetti in esame coincidono, ovvero restituire true se e solo se i valori di tutte le variabili di esemplare dei due oggetti.