Object Oriented Programming with Java

⌘K
  1. Home
  2. Docs
  3. Object Oriented Programmi...
  4. Inheritance and Interface
  5. The Object Class in Java

The Object Class in Java

Learn everything about the Object class in Java, its methods, importance, and practical usage. Discover how the Object class serves as the root of all Java classes with real-world examples and best practices.


Introduction to the Object Class in Java

In Java, everything revolves around objects. But did you know that every class in Java, directly or indirectly, inherits from a single superclass called the Object class?

The Object class is the root of the entire Java class hierarchy. It resides in the java.lang package and provides fundamental methods that all Java objects share, such as comparison, cloning, synchronization, and more.

Understanding the Object class is essential for mastering object-oriented programming (OOP) in Java. Whether you’re a beginner or a professional developer, knowing how to use and override its methods can make your code cleaner, more efficient, and more reliable.


What is the Object Class in Java?

The Object class is a built-in class in Java that serves as the superclass of all other classes. It means every Java class extends the Object class either explicitly or implicitly.

Here’s how it looks:

public class Object {
    // predefined methods
}

When you create a new class in Java, even without extending another class, it automatically extends the Object class:

class Example {
    // implicitly extends Object class
}

That’s why every object in Java can use the methods of the Object class.


Why the Object Class is Important

The Object class ensures a common structure and behavior for all Java objects. This enables polymorphism and code reusability across the language.

Key benefits include:

  • Provides universal methods applicable to all classes.
  • Supports object comparison, cloning, and hashing.
  • Enables thread synchronization via the wait(), notify(), and notifyAll() methods.
  • Establishes Java’s inheritance hierarchy by acting as the root class.

Key Methods of the Object Class in Java

Let’s explore the most commonly used methods of the Object class that every developer should know.

1. toString() Method

The toString() method returns a string representation of the object. It is often overridden to provide meaningful output.

Syntax:

public String toString()

Example:

class Student {
    String name = "Alice";
    int age = 21;

    public String toString() {
        return name + " - " + age;
    }
}

public class Main {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.toString());
    }
}

Output:

Alice - 21

2. equals() Method

The equals() method compares two objects for equality.

Syntax:

public boolean equals(Object obj)

Example:

class Student {
    int id;

    Student(int id) {
        this.id = id;
    }

    public boolean equals(Object obj) {
        Student s = (Student) obj;
        return this.id == s.id;
    }
}

public class Main {
    public static void main(String[] args) {
        Student s1 = new Student(101);
        Student s2 = new Student(101);
        System.out.println(s1.equals(s2)); // true
    }
}

3. hashCode() Method

The hashCode() method returns an integer hash value for an object. It’s often used in collections like HashMap or HashSet.

Syntax:

public int hashCode()

When overriding equals(), always override hashCode() to maintain consistency.


4. getClass() Method

This method returns the runtime class of an object.

Syntax:

public final Class<?> getClass()

Example:

String str = "Hello Java";
System.out.println(str.getClass());

Output:

class java.lang.String

5. clone() Method

The clone() method creates and returns a copy of the object.

Syntax:

protected Object clone() throws CloneNotSupportedException

To use it, your class must implement the Cloneable interface.


6. finalize() Method

This method is called by the garbage collector before destroying an object.

Syntax:

protected void finalize() throws Throwable

Though rarely used in modern Java, it’s good to know for legacy systems.


7. wait(), notify(), and notifyAll() Methods

These are synchronization methods used in multithreading for inter-thread communication.

  • wait() – pauses the thread until another thread calls notify().
  • notify() – wakes up one waiting thread.
  • notifyAll() – wakes up all waiting threads.

Hierarchy and Relationship with Other Classes

Every Java class extends the Object class, directly or indirectly:

java.lang.Object

    ClassA

    ClassB

Even arrays and wrapper classes (Integer, String, etc.) inherit from Object.


Example: Using Object Class Methods Together

class Person {
    String name;

    Person(String name) {
        this.name = name;
    }

    public String toString() {
        return name;
    }

    public boolean equals(Object obj) {
        if (obj instanceof Person) {
            Person p = (Person) obj;
            return this.name.equals(p.name);
        }
        return false;
    }

    public int hashCode() {
        return name.hashCode();
    }
}

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("John");
        Person p2 = new Person("John");

        System.out.println(p1.equals(p2));     // true
        System.out.println(p1.hashCode());     // hash value
        System.out.println(p1.toString());     // John
    }
}

Best Practices When Working with the Object Class

  • Always override equals() and hashCode() together.
  • Use toString() for debugging and logging.
  • Avoid using finalize() in new code.
  • Prefer modern alternatives like Objects.equals() from java.util.Objects.
  • Be cautious with cloning — deep copies are safer than shallow ones.

Conclusion

The Object class in Java is the foundation of object-oriented programming in the language. Every class you create inherits its methods, which provide essential functionality for equality checks, representation, synchronization, and more.

By understanding how to effectively use and override these methods, you can write more efficient, maintainable, and professional Java code.


Frequently Asked Questions (FAQ)

Q1. What is the Object class in Java?
The Object class is the parent class of all classes in Java, providing basic methods like toString(), equals(), and hashCode().

Q2. Is the Object class abstract?
No, the Object class is not abstract — it can be instantiated, though it’s rarely done.

Q3. How is the Object class related to inheritance?
Every class in Java implicitly extends the Object class, forming the root of the Java class hierarchy.

Q4. What is the difference between == and equals()?
== compares object references, while equals() compares the actual content or values.

Q5. Why should we override hashCode() when overriding equals()?
Because Java collections like HashMap rely on both methods for object comparison and storage consistency.

Tags , , , , , , , , ,

How can we help?

Leave a Reply

Your email address will not be published. Required fields are marked *