Menu
Coddy logo textTech

La clase Object

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy. Lección 24 de 87.

En Java, cada clase que creas hereda automáticamente de una clase especial llamada Object. Incluso si no escribes extends en ningún lugar, tu clase sigue siendo una hija de Object. Esto convierte a Object en la raíz de toda la jerarquía de clases.

public class Person {
    // Esto extiende implícitamente a Object
}

// Es equivalente a:
public class Person extends Object {
}

Debido a que cada clase hereda de Object, cada objeto en Java tiene acceso a varios métodos integrados. Los más utilizados incluyen:

MétodoPropósito
toString()Devuelve una representación en cadena del objeto
equals(Object obj)Compara dos objetos para determinar su igualdad
hashCode()Devuelve un valor de código hash para el objeto
getClass()Devuelve la clase en tiempo de ejecución del objeto

Por defecto, estos métodos tienen implementaciones genéricas. Por ejemplo, toString() devuelve el nombre de la clase seguido de @ y el código hash del objeto en hexadecimal, lo cual no es muy útil:

Person p = new Person();
System.out.println(p.toString());  // Salida: Person@1a2b3c4d

Es por esto que a menudo sobrescribirás estos métodos en tus propias clases para proporcionar un comportamiento significativo. Comprender que Object es el padre universal ayuda a explicar por qué puedes almacenar cualquier objeto en una variable Object y por qué ciertos métodos están disponibles en cada objeto que creas.

challenge icon

Desafío

Fácil

Exploremos cómo la clase Object sirve como clase principal universal de todas las clases de Java mediante la creación de un sistema sencillo de inventario de dispositivos que demuestra los métodos heredados de Object.

Crearás tres archivos para organizar tu código:

  • Gadget.java: Crea una clase que represente un dispositivo electrónico. Tu clase debe tener:
    • Campos privados para name (String) y year (int)
    • Un constructor que inicialice ambos campos
    • Métodos getter getName() y getYear()
    No sobrescribas ningún método de Object; primero queremos ver el comportamiento predeterminado.
  • Smartphone.java: Crea una subclase que extienda Gadget y añada características específicas de un smartphone:
    • Un campo privado para brand (String)
    • Un constructor que reciba name, year y brand; usa super(name, year) para la parte correspondiente a la clase principal
    • Un método getBrand() que devuelva brand
    • Sobrescribe el método toString() para que devuelva: Smartphone: [brand] [name] ([year])
  • Main.java: Demuestra la diferencia entre los métodos Object predeterminados y sobrescritos. Recibirás tres entradas: el nombre de un dispositivo, el año y la marca. Crea un Gadget y un Smartphone usando el mismo nombre y año (además de la marca para el smartphone) y, después:
    • Imprime el nombre de la clase del dispositivo usando getClass().getSimpleName()
    • Imprime si el toString() predeterminado del dispositivo contiene el símbolo "@" (imprime true o false)
    • Imprime el smartphone usando su método toString() sobrescrito

Recibirás tres entradas: el nombre del dispositivo/smartphone (String), el año (int) y la marca (String).

Este desafío muestra por qué es importante sobrescribir los métodos de Object: el toString() predeterminado te proporciona algo como Gadget@1a2b3c, mientras que tu versión personalizada ofrece información significativa.

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer entradas
        String name = scanner.nextLine();
        int year = scanner.nextInt();
        scanner.nextLine(); // consumir nueva línea
        String brand = scanner.nextLine();
        
        // TODO: Crear un objeto Gadget con name y year
        
        // TODO: Crear un objeto Smartphone con name, year y brand
        
        // TODO: Imprimir el nombre de la clase del gadget usando getClass().getSimpleName()
        
        // TODO: Imprimir si el toString() del gadget contiene "@" (true o false)
        
        // TODO: Imprimir el smartphone (usa el toString() sobrescrito)
        
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Java online