Método toString()
Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 41 de 87.
Cada clase en Java hereda de la clase Object, la cual proporciona varios métodos útiles. Uno de los más comúnmente sobrescritos es toString(), que devuelve una representación en cadena de un objeto.
Por defecto, toString() devuelve el nombre de la clase seguido del código hash del objeto, lo cual no es muy ú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@15db9742Al sobrescribir toString(), puedes proporcionar una salida significativa que describa el estado del 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]El método toString() se llama automáticamente cuando imprimes un objeto o lo concatenas con una cadena. Esto facilita mucho la depuración, ya que puedes ver rápidamente el contenido de un objeto sin escribir código adicional.
Desafío
FácilVamos a construir un sistema de inventario de productos que muestre información significativa sobre los artículos utilizando implementaciones personalizadas de toString(). Crearás una clase Product que sobrescriba el método toString() predeterminado para proporcionar una representación clara y legible de cada producto.
Organizarás tu código en dos archivos:
Product.java: Crea una clase que represente un artículo del inventario. Cada Product tiene tres campos privados:name(String),price(double) yquantity(int). Incluye un constructor que inicialice los tres campos. Sobrescribe el métodotoString()para devolver una cadena con formato en este formato exacto:Product[name=X, price=Y, quantity=Z]donde X, Y y Z son los valores reales de los campos. El precio debe mostrarse como un número simple (no se necesita un formato especial).Main.java: Da vida a tu clase Product creando y mostrando productos. Recibirás tres entradas: un nombre de producto (String), un precio (double) y una cantidad (int). Crea un Product con estos valores, luego simplemente imprime el objeto del producto directamente usandoSystem.out.println(). ¡Gracias a tu métodotoString()sobrescrito, esto mostrará automáticamente la información formateada del producto en lugar de la críptica salida predeterminada!
Recibirás tres entradas: el nombre del producto (String), el precio (double) y la cantidad (int).
¡Observa cómo imprimir el objeto directamente llama a tu método toString() automáticamente; esto es lo que hace que la depuración y el registro sean mucho más fáciles en aplicaciones reales!
Hoja de referencia
Cada clase en Java hereda de la clase Object. El método toString() devuelve una representación en cadena de un objeto.
Por defecto, toString() devuelve el nombre de la clase seguido del código hash del objeto:
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742Sobrescribe toString() para proporcionar una salida 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]El método toString() se llama automáticamente cuando imprimes un objeto o lo concatenas con una cadena.
Pruébalo tú mismo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leer las entradas
String name = scanner.nextLine();
double price = scanner.nextDouble();
int quantity = scanner.nextInt();
// TODO: Crear un objeto Product con los valores de entrada
// TODO: Imprimir el objeto product directamente
// (¡Esto llamará automáticamente a tu método toString()!)
}
}
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
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Iterator