Ce face Object
Orice clasă din Java moștenește, direct sau indirect, clasa Object. Dacă scrii class Elev fără extends, compilatorul adaugă singur extends Object. De aceea orice obiect are metodele equals, hashCode și toString, iar o variabilă de tip Object poate ține orice obiect (și, prin autoboxing, orice valoare primitivă).
getClass() returnează obiectul Class care descrie clasa reală a obiectului, cea folosită la new, chiar dacă variabila are un tip mai general. Din el afli numele: getSimpleName() (de exemplu Elev) sau getName() (cu pachetul, de exemplu java.lang.String). Metoda este final, deci nu poate fi suprascrisă.
Ce returnează
getClass(): obiectul Class al clasei reale.
Exemple
Exemplul 1: Orice valoare încape într-un Object
public class Main {
public static void main(String[] args) {
Object[] lucruri = {"Iași", 42, 3.14, 'A', true, new int[] {1, 2}};
for (Object o : lucruri) {
System.out.println(o.getClass().getSimpleName() + " / " + o.getClass().getName());
}
}
}
Rezultat
String / java.lang.String
Integer / java.lang.Integer
Double / java.lang.Double
Character / java.lang.Character
Boolean / java.lang.Boolean
int[] / [I
Exemplul 2: Clasa reală, nu tipul variabilei
public class Main {
static class Persoana {}
static class Elev extends Persoana {}
public static void main(String[] args) {
Persoana p = new Elev();
System.out.println(p.getClass().getSimpleName());
System.out.println(p instanceof Persoana);
System.out.println(p.getClass() == Persoana.class);
System.out.println(p.getClass().getSuperclass().getSimpleName());
System.out.println(Persoana.class.getSuperclass().getName());
}
}
Rezultat
Elev
true
false
Persoana
java.lang.Object
Greșeli frecvente
- Folosești
getClass() == Clasa.classcând voiai „este de tipul acesta sau un subtip”: pentru subclase rezultatul estefalse. Foloseșteinstanceof. - Apelezi
getClass()pe o variabilănull: primeștiNullPointerException.
Comenzi înrudite
Object.equals: equals() spune dacă două obiecte sunt „egale”, iar hashCode() dă un număr folosit de HashMap și HashSet; se suprascriu împreună.Object.toString: Returnează textul care descrie obiectul; este apelată automat de println și de operatorul + cu șiruri.instanceof: instanceof verifică dacă un obiect este de un anumit tip; în forma nouă declară și o variabilă deja convertită la acel tip.Moștenire (extends): Cu extends o clasă moștenește câmpurile și metodele altei clase și le poate extinde sau rescrie; Java permite o singură superclasă.Objects: Clasa java.util.Objects are metode statice care lucrează sigur cu null; equals() compară două obiecte care pot fi null.