Método toString()
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 41 de 87.
Toda classe em Java herda da classe Object, que fornece vários métodos úteis. Um dos mais comumente sobrescritos é o toString(), que retorna uma representação em string de um objeto.
Por padrão, toString() retorna o nome da classe seguido pelo hash code do objeto, o que não é muito útil:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742Ao sobrescrever toString(), você pode fornecer uma saída significativa que descreve o estado do objeto:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person[name=Alice, age=25]O método toString() é chamado automaticamente quando você imprime um objeto ou o concatena com uma string. Isso torna a depuração muito mais fácil, já que você pode ver rapidamente o conteúdo de um objeto sem escrever código extra.
Desafio
FácilVamos construir um sistema de inventário de produtos que exibe informações significativas sobre os itens usando implementações personalizadas de toString(). Você criará uma classe Product que sobrescreve o método toString() padrão para fornecer uma representação clara e legível de cada produto.
Você organizará seu código em dois arquivos:
Product.java: Crie uma classe que representa um item do inventário. Cada Product possui três campos privados:name(String),price(double) equantity(int). Inclua um construtor que inicialize todos os três campos. Sobrescreva o métodotoString()para retornar uma string formatada exatamente neste formato:Product[name=X, price=Y, quantity=Z]onde X, Y e Z são os valores reais dos campos. O preço deve ser exibido como um número simples (nenhuma formatação especial é necessária).Main.java: Dê vida à sua classe Product criando e exibindo produtos. Você receberá três entradas: um nome de produto (String), um preço (double) e uma quantidade (int). Crie um Product com esses valores e, em seguida, simplesmente imprima o objeto do produto diretamente usandoSystem.out.println(). Graças ao seu métodotoString()sobrescrito, isso exibirá automaticamente as informações formatadas do produto em vez da saída padrão enigmática!
Você receberá três entradas: o nome do produto (String), o preço (double) e a quantidade (int).
Observe como imprimir o objeto diretamente chama seu método toString() automaticamente—é isso que torna a depuração e o registro de logs muito mais fáceis em aplicações reais!
Folha de consulta
Toda classe em Java herda da classe Object. O método toString() retorna uma representação em string de um objeto.
Por padrão, o toString() retorna o nome da classe seguido pelo hash code do objeto:
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742Sobrescreva o toString() para fornecer uma saída significativa:
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person[name=Alice, age=25]O método toString() é chamado automaticamente quando você imprime um objeto ou o concatena com uma string.
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();
double price = scanner.nextDouble();
int quantity = scanner.nextInt();
// TODO: Criar um objeto Product com os valores de entrada
// TODO: Imprimir o objeto product diretamente
// (Isso chamará automaticamente o seu método toString()!)
}
}
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
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosCampos (Atributos)Método ConstrutorSobrecarga de ConstrutorRecapitulação - Calculadora Simples4Herança
Herança Básica (extends)A Palavra-chave superSobrescrita de Método (@Override)Encadeamento de ConstrutoresA Classe ObjectHerança Simples e MultinívelPor que não há Herança Múltipla de ClassesRecapitulação - Hierarquia de Funcionários7Métodos Especiais e a Classe Object
Método toString()equals() e hashCode()Método clone()compareTo() e ComparableInterface ComparatorRecapitulação - Ordenação Personalizada2Modificadores de Acesso e Encapsulamento
Visão Geral dos Níveis de AcessoMétodos Getter e SetterOcultação de InformaçõesA Palavra-chave finalRecapitulação - Gerenciador de Conta Bancária5Polimorfismo
Fundamentos de Sobrecarga de MétodosSobrescrita de Métodos (Tempo de Execução)Upcasting e DowncastingO Operador instanceofClasses e Métodos AbstratosRecapitulação - Calculadora de Formas8Conceitos Avançados de OOP
Composição vs HerançaAgregação vs ComposiçãoClasses Internas, Aninhadas e AnônimasEnums e Métodos de EnumRecords (Java 16+)Classes Seladas (Java 17+)11Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão BuilderPadrão ObserverPadrão Strategy3Propriedades de Classe e Membros Estáticos
Variáveis de Instância vs EstáticasMétodos EstáticosBlocos EstáticosConstantes (static final)Recapitulação - Contador e Utilitário6Interfaces e Classes Abstratas
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesDefault e Static em InterfacesClasses Abstratas vs InterfacesInterfaces FuncionaisRecapitulação - Sistema de Pagamento9Generics
Introdução a GenericsClasses GenéricasMétodos GenéricosParâmetros de Tipos DelimitadosWildcards (?, extends, super)Recapitulação - Container Genérico12Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Iterator