Menu
Coddy logo textTech

A Classe Object

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy. Lição 24 de 87.

Em Java, cada classe que você cria herda automaticamente de uma classe especial chamada Object. Mesmo que você não escreva extends em lugar nenhum, sua classe ainda é uma filha de Object. Isso torna a Object a raiz de toda a hierarquia de classes.

public class Person {
    // Isso estende implicitamente Object
}

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

Como toda classe herda de Object, todo objeto em Java tem acesso a vários métodos integrados. Os mais usados incluem:

MétodoFinalidade
toString()Retorna uma representação em string do objeto
equals(Object obj)Compara dois objetos quanto à igualdade
hashCode()Retorna um valor de código hash para o objeto
getClass()Retorna a classe de tempo de execução do objeto

Por padrão, esses métodos têm implementações genéricas. Por exemplo, toString() retorna o nome da classe seguido por @ e o hash code do objeto em hexadecimal, o que não é muito útil:

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

É por isso que você frequentemente substituirá esses métodos em suas próprias classes para fornecer um comportamento significativo. Entender que Object é o pai universal ajuda a explicar por que você pode armazenar qualquer objeto em uma variável Object e por que certos métodos estão disponíveis em cada objeto que você cria.

challenge icon

Desafio

Fácil

Vamos explorar como a classe Object serve como a classe pai universal de todas as classes Java, criando um sistema simples de inventário de dispositivos que demonstra métodos herdados de Object.

Você criará três arquivos para organizar seu código:

  • Gadget.java: Crie uma classe que represente um dispositivo eletrônico. Sua classe deve ter:
    • Campos privados para name (String) e year (int)
    • Um construtor que inicialize ambos os campos
    • Métodos getter getName() e getYear()
    Não sobrescreva nenhum método de Object — queremos ver primeiro o comportamento padrão.
  • Smartphone.java: Crie uma subclasse que estenda Gadget e adicione recursos específicos de smartphones:
    • Um campo privado para brand (String)
    • Um construtor que receba name, year e brand — use super(name, year) para a parte da classe pai
    • Um método getBrand() que retorne a marca
    • Sobrescreva o método toString() para retornar: Smartphone: [brand] [name] ([year])
  • Main.java: Demonstre a diferença entre os métodos padrão e sobrescritos de Object. Você receberá três entradas: o nome, o ano e a marca de um dispositivo. Crie um Gadget e um Smartphone usando o mesmo nome e ano (mais a marca para o smartphone) e, então:
    • Imprima o nome da classe do dispositivo usando getClass().getSimpleName()
    • Imprima se o toString() padrão do dispositivo contém o símbolo "@" (imprima true ou false)
    • Imprima o smartphone usando seu toString() sobrescrito

Você receberá três entradas: o nome do dispositivo/smartphone (String), o ano (int) e a marca (String).

Este desafio mostra por que sobrescrever os métodos de Object é importante — o toString() padrão fornece algo como Gadget@1a2b3c, enquanto sua versão personalizada fornece informações significativas!

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler as entradas
        String name = scanner.nextLine();
        int year = scanner.nextInt();
        scanner.nextLine(); // consumir a quebra de linha
        String brand = scanner.nextLine();
        
        // TODO: Criar um objeto Gadget com name e year
        
        // TODO: Criar um objeto Smartphone com name, year, e brand
        
        // TODO: Imprimir o nome da classe do gadget usando getClass().getSimpleName()
        
        // TODO: Imprimir se o toString() do gadget contém "@" (true ou false)
        
        // TODO: Imprimir o smartphone (usa o toString() sobrescrito)
        
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Java online