Clases y Objetos en Profundidad: Domina la Base de Java
-
Yamil Villarreal
- 12 Jul, 2024

Cuando empecé a programar, escuchaba hablar de “clases” y “objetos” como si fueran algo mágico… pero nadie me decía cómo se usan realmente en el código o para qué sirven fuera de la teoría. Si te sientes igual, no te preocupes. Hoy vamos a aterrizar estos conceptos usando ejemplos reales (y algún que otro tip práctico).
¿Qué es una Clase?
Imagina que tienes que diseñar el plano de una casa. Ese plano no es una casa real, pero define cuántos cuartos, puertas y ventanas tendrá cada casa que se construya a partir de él.
En Java, una clase es ese plano. Define las características (atributos) y las acciones (métodos) que tendrán los objetos creados a partir de ella.
public class Casa {
String direccion;
int habitaciones;
void abrirPuerta() {
System.out.println("La puerta se ha abierto.");
}
}
¿Qué es un Objeto?
Siguiendo la analogía, el objeto es la casa construida. Puedes tener muchas casas diferentes (objetos), todas creadas a partir del mismo plano (clase), pero cada una con su propia dirección y número de habitaciones.
public class Main {
public static void main(String[] args) {
Casa miCasa = new Casa();
miCasa.direccion = "Calle Primavera 123";
miCasa.habitaciones = 3;
miCasa.abrirPuerta();
}
}
- Aquí,
miCasa
es un objeto. - Tiene su propia dirección y número de habitaciones, ¡es única!
Atributos: Las “propiedades” del objeto
Los atributos son las características o datos que guarda cada objeto. Piensa en el color, modelo, o placa de un auto.
En el ejemplo anterior, direccion
y habitaciones
son atributos de la clase Casa
.
public class Auto {
String modelo;
String color;
String placa;
}
Métodos: Las “acciones” del objeto
Los métodos son las cosas que el objeto puede hacer. Por ejemplo, un auto puede arrancar, frenar o acelerar.
public class Auto {
void arrancar() {
System.out.println("El auto ha arrancado.");
}
void frenar() {
System.out.println("El auto está frenando.");
}
}
Constructores: Cómo “nacen” los objetos
Un constructor es un método especial que se llama automáticamente al crear un objeto, y sirve para darle valores iniciales.
public class Persona {
String nombre;
int edad;
// Constructor
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
}
// Usando el constructor
Persona persona1 = new Persona("Ana", 28);
Persona persona2 = new Persona("Juan", 35);
- Así te aseguras que cada persona siempre tiene un nombre y una edad desde el inicio.
Sobrecarga de Constructores: ¡Hazlo flexible!
A veces necesitas crear objetos de maneras diferentes. Por eso, puedes tener varios constructores con diferentes parámetros (esto se llama sobrecarga de constructores).
public class Libro {
String titulo;
String autor;
int paginas;
// Constructor 1: todos los datos
public Libro(String titulo, String autor, int paginas) {
this.titulo = titulo;
this.autor = autor;
this.paginas = paginas;
}
// Constructor 2: solo título y autor, páginas por defecto
public Libro(String titulo, String autor) {
this.titulo = titulo;
this.autor = autor;
this.paginas = 100; // valor por defecto
}
}
Libro libro1 = new Libro("Clean Code", "Robert C. Martin", 425);
Libro libro2 = new Libro("Aprendiendo Java", "Yamil Villarreal"); // 100 páginas por defecto
Ejemplo de la Vida Real: Clase “Cafetera”
Vamos a crear una clase que represente una cafetera (¡indispensable para programar!):
public class Cafetera {
String marca;
int capacidad; // en mililitros
int nivelActual;
// Constructor principal
public Cafetera(String marca, int capacidad) {
this.marca = marca;
this.capacidad = capacidad;
this.nivelActual = 0; // la cafetera inicia vacía
}
// Método para llenar la cafetera
void llenar() {
nivelActual = capacidad;
System.out.println("La cafetera está llena.");
}
// Método para servir café
void servirTaza(int cantidad) {
if (cantidad <= nivelActual) {
nivelActual -= cantidad;
System.out.println("Se sirvió una taza de " + cantidad + "ml. Quedan " + nivelActual + "ml.");
} else {
System.out.println("No hay suficiente café para servir esa taza.");
}
}
}
// Usando la clase Cafetera
Cafetera miCafetera = new Cafetera("Oster", 1000);
miCafetera.llenar();
miCafetera.servirTaza(250);
miCafetera.servirTaza(800); // Esto debe mostrar una advertencia
Resumen y mejores prácticas
- Las clases son tus planos, los objetos son las casas reales.
- Atributos: Las características.
- Métodos: Las acciones.
- Constructores: Cómo nacen tus objetos.
- Sobrecarga: Flexibilidad, pero sin complicar.