Clasa Object și metodele sale
Deși putem crea o clasă obișnuită care nu moștenește explicit alte clase, toate clasele din Java moștenesc implicit clasa Object. Toate celelalte clase, inclusiv cele pe care le adăugăm noi în proiectele noastre, sunt derivate implicit din Object. Prin urmare, toate tipurile și clasele pot implementa metodele definite în clasa Object. Să analizăm aceste metode.
Metoda toString
Metoda toString este utilizată pentru a obține o reprezentare a obiectului curent sub forma unui șir de caractere. În mod implicit, când încercăm să afișăm un obiect, de obicei va fi afișat numele complet al clasei urmat de un hash unic. De exemplu:
public class Program {
public static void main(String[] args) {
Person tom = new Person("Tom");
System.out.println(tom.toString()); // Afișează ceva de genul Person@7960847b
}
}
class Person {
private String name;
public Person(String name) {
this.name = name;
}
}
Valoarea obținută (în acest caz, Person@7960847b) nu este foarte utilă pentru o descriere a obiectului. De aceea, metoda toString() este adesea suprascrisă. De exemplu:
public class Program {
public static void main(String[] args) {
Person tom = new Person("Tom");
System.out.println(tom.toString()); // Person Tom
}
}
class Person {
private String name;
public Person(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person " + name;
}
}
Metoda hashCode
Metoda hashCode permite generarea unui cod numeric asociat obiectului respectiv, cunoscut sub numele de cod hash. Acest cod poate fi folosit pentru a compara obiecte.
De exemplu, putem afișa hash-ul unui obiect:
Person tom = new Person("Tom");
System.out.println(tom.hashCode()); // 2036368507
De asemenea, putem defini propriul algoritm de calcul al codului hash:
class Person {
private String name;
public Person(String name) {
this.name = name;
}
@Override
public int hashCode() {
return 10 * name.hashCode() + 20456;
}
}
Obținerea tipului obiectului și metoda getClass
Metoda getClass permite obținerea tipului obiectului:
Person tom = new Person("Tom");
System.out.println(tom.getClass()); // class Person
Metoda equals
Metoda equals compară două obiecte pentru a verifica egalitatea lor:
public class Program {
public static void main(String[] args) {
Person tom = new Person("Tom");
Person bob = new Person("Bob");
System.out.println(tom.equals(bob)); // false
Person tom2 = new Person("Tom");
System.out.println(tom.equals(tom2)); // true
}
}
class Person {
private String name;
public Person(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Person)) return false;
Person p = (Person) obj;
return this.name.equals(p.name);
}
}
Metoda equals primește ca parametru un obiect de orice tip. Apoi încercăm să convertim obiectul primit la tipul curent, în cazul în care cele două obiecte sunt din aceeași clasă. Operatorul instanceof verifică dacă obiectul transmis ca parametru este de tipul Person. Dacă obiectele sunt de clase diferite, compararea lor nu are sens, iar metoda returnează false.
Ulterior, comparăm obiectele pe baza numelui. Dacă numele coincid, metoda returnează true, indicând că obiectele sunt egale.