Sobes.tech
Junior

Τι ξέρεις για την κλάση Object;

sobes.tech AI

Απάντηση από AI

Το java.lang.Object είναι η ριζική κλάση στην ιεραρχία των κλάσεων Java. Κάθε κλάση κληρονομεί έμμεσα από το Object.

Βασικές μέθοδοι:

  • equals(Object obj): Συγκρίνει το τρέχον αντικείμενο με ένα άλλο για ισότητα. Από προεπιλογή, συγκρίνει τις αναφορές.
  • hashCode(): Επιστρέφει τον κωδικό hash του αντικειμένου. Χρησιμοποιείται σε συλλογές που βασίζονται σε πίνακες κατακερματισμού (π.χ. HashMap, HashSet). Αν δύο αντικείμενα είναι ίσα σύμφωνα με το equals(), οι hashCode() τους πρέπει να είναι ίσοι.
  • toString(): Επιστρέφει μια αναπαράσταση σε συμβολοσειρά του αντικειμένου. Από προεπιλογή, επιστρέφει το όνομα της κλάσης + @ + τον κωδικό hash σε δεκαεξαδική μορφή. Συχνά υπερισχύει για να παρέχει μια πιο ενημερωτική αναπαράσταση.
  • getClass(): Επιστρέφει ένα αντικείμενο Class που αντιπροσωπεύει την κλάση του αντικειμένου κατά την εκτέλεση.
  • notify(): Επαναφέρει την εκτέλεση ενός νήματος που περιμένει στον μονοίρο αυτού του αντικειμένου.
  • notifyAll(): Επαναφέρει την εκτέλεση όλων των νημάτων που περιμένουν στον μονοίρο αυτού του αντικειμένου.
  • wait() / wait(long timeout) / wait(long timeout, int nanos): Κάνει το τρέχον νήμα να περιμένει μέχρι να καλέσει άλλο νήμα notify() ή notifyAll() σε αυτό το αντικείμενο ή να λήξει ο καθορισμένος χρόνος. Μπορεί να κληθεί μόνο μέσα σε συγχρονισμένα μπλοκ ή μεθόδους.
  • clone(): Δημιουργεί και επιστρέφει ένα αντίγραφο αυτού του αντικειμένου. Απαιτεί την υλοποίηση της διεπαφής Cloneable.
  • finalize(): Καλείται από τον συλλέκτη απορριμμάτων πριν διαγραφεί το αντικείμενο. Δεν συνιστάται η χρήση του λόγω απρόβλεπτης συμπεριφοράς.

Παράδειγμα υπερφόρτωσης των equals() και hashCode():

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
               Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "Person{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
    }
}

Η κλάση Object παρέχει θεμελιώδεις μηχανισμούς που είναι απαραίτητοι για τη λειτουργία των αντικειμένων στη Java, όπως η σύγκριση, η κατακερματισμός, ο συγχρονισμός νημάτων και η απόκτηση πληροφοριών σχετικά με την κλάση.