Object în Java

Clasa de bază a tuturor claselor Java; getClass() spune din ce clasă face parte un obiect la rulare.

Sintaxă
public class Object
final Class<?> getClass()

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.class când voiai „este de tipul acesta sau un subtip”: pentru subclase rezultatul este false. Folosește instanceof.
  • Apelezi getClass() pe o variabilă null: primești NullPointerException.

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.