10 Ejercicios resueltos de Clases y Objetos en Java

Domina las Clases y Objetos en Java con 10 ejercicios prácticos resueltos paso a paso. ¡Ideal para principiantes en Programación Orientada a Objetos (POO)!

¿Estás comenzando tu viaje en la Programación Orientada a Objetos (POO) con Java? ¡Has llegado al lugar indicado! Las clases y los objetos son los pilares fundamentales de este paradigma, y entenderlos bien es el primer gran paso para convertirte en un desarrollador experto. En este artículo, no solo te explicaremos la teoría de forma sencilla, sino que te retaremos con 10 ejercicios diseñados para que aprendas haciendo. ¡Prepárate para llevar tu código al siguiente nivel!

Aprendizaje Teórico: ¿Qué Son las Clases y los Objetos?

Antes de sumergirnos en el código, aclaremos los conceptos básicos. Piensa en una clase como un plano o un molde para crear algo. Por ejemplo, el plano de una casa define sus características (número de habitaciones, color de las paredes, etc.) y sus funcionalidades (abrir puertas, encender luces). En Java, una clase define los atributos (variables) y métodos (funciones) que tendrán los objetos creados a partir de ella.

Un objeto, por otro lado, es la construcción real basada en ese plano. Siguiendo el ejemplo, cada casa construida a partir del mismo plano es un objeto único. Puede tener diferentes colores de pared o muebles distintos, pero todas comparten la misma estructura base definida en la clase. En resumen:

  • Clase: Es la plantilla, el molde. Define la estructura y el comportamiento.
  • Objeto: Es una instancia de una clase. Es la entidad real con la que interactuas en tu programa.

Con esta idea en mente, ¡ya estás listo para empezar a programar!

¡Inténtalo Tú Mismo Primero!

El verdadero aprendizaje ocurre cuando te enfrentas a un problema por tu cuenta. Antes de ver la solución de cada ejercicio, lee detenidamente el enunciado y piensa cómo lo resolverías. Abre tu editor de código, experimenta y no temas equivocarte. ¡Cada error es una oportunidad de aprender! Una vez que lo hayas intentado, compara tu solución con la nuestra para consolidar tus conocimientos.

10 Ejercicios Resueltos de Clases y Objetos

Ejercicio 1: Creando tu Primera Clase Coche

Problema: Crea una clase Coche que tenga los atributos marca, modelo y año. Incluye un método que imprima por pantalla toda la información del coche.

// Archivo: Coche.java
public class Coche {
    // Atributos de la clase
    String marca;
    String modelo;
    int anio;

    // Constructor para inicializar los atributos
    public Coche(String marca, String modelo, int anio) {
        this.marca = marca;
        this.modelo = modelo;
        this.anio = anio;
    }

    // Método para mostrar la información del coche
    public void mostrarInfo() {
        System.out.println("Marca: " + marca);
        System.out.println("Modelo: " + modelo);
        System.out.println("Año: " + anio);
    }

    // Método main para probar la clase
    public static void main(String[] args) {
        // Creamos un objeto (instancia) de la clase Coche
        Coche miCoche = new Coche("Toyota", "Corolla", 2021);
        
        // Llamamos al método para mostrar su información
        miCoche.mostrarInfo();
    }
}

Ejercicio 2: Clase Rectangulo con Cálculo de Área

Problema: Diseña una clase Rectangulo con los atributos ancho y alto. Añade un método calcularArea() que devuelva el área del rectángulo.

// Archivo: Rectangulo.java
public class Rectangulo {
    // Atributos
    double ancho;
    double alto;

    // Constructor
    public Rectangulo(double ancho, double alto) {
        this.ancho = ancho;
        this.alto = alto;
    }

    // Método para calcular el área
    public double calcularArea() {
        return ancho * alto;
    }

    public static void main(String[] args) {
        // Creamos un objeto Rectangulo
        Rectangulo miRectangulo = new Rectangulo(10.5, 5.2);
        
        // Calculamos y mostramos el área
        double area = miRectangulo.calcularArea();
        System.out.println("El área del rectángulo es: " + area); // Salida: 54.6
    }
}

Ejercicio 3: Clase Circulo con Radio y Perímetro

Problema: Crea una clase Circulo con un atributo radio. Debe tener métodos para calcular y devolver tanto el área (π * radio²) como el perímetro (2 * π * radio).

// Archivo: Circulo.java
public class Circulo {
    // Atributo
    double radio;

    // Constructor
    public Circulo(double radio) {
        this.radio = radio;
    }

    // Método para calcular el área
    public double calcularArea() {
        // Math.PI es una constante de Java para el valor de Pi
        return Math.PI * radio * radio;
    }

    // Método para calcular el perímetro
    public double calcularPerimetro() {
        return 2 * Math.PI * radio;
    }

    public static void main(String[] args) {
        Circulo miCirculo = new Circulo(5.0);
        
        System.out.println("Área del círculo: " + miCirculo.calcularArea());
        System.out.println("Perímetro del círculo: " + miCirculo.calcularPerimetro());
    }
}

Ejercicio 4: Clase Estudiante con Calificaciones

Problema: Define una clase Estudiante con los atributos nombre y calificacion (un número). Incluye un método que devuelva si el estudiante ha «Aprobado» (calificación >= 6) o «Reprobado».

// Archivo: Estudiante.java
public class Estudiante {
    String nombre;
    double calificacion;

    public Estudiante(String nombre, double calificacion) {
        this.nombre = nombre;
        this.calificacion = calificacion;
    }

    // Método que determina si el estudiante aprobó
    public String obtenerEstado() {
        if (calificacion >= 6.0) {
            return "Aprobado";
        } else {
            return "Reprobado";
        }
    }

    public static void main(String[] args) {
        Estudiante estudiante1 = new Estudiante("Ana", 8.5);
        Estudiante estudiante2 = new Estudiante("Luis", 4.9);

        System.out.println("El estado de " + estudiante1.nombre + " es: " + estudiante1.obtenerEstado());
        System.out.println("El estado de " + estudiante2.nombre + " es: " + estudiante2.obtenerEstado());
    }
}

Ejercicio 5: Clase Libro con Detalles

Problema: Crea una clase Libro con los atributos titulo, autor y numeroDePaginas. Añade un método que imprima un resumen del libro.

// Archivo: Libro.java
public class Libro {
    String titulo;
    String autor;
    int numeroDePaginas;

    public Libro(String titulo, String autor, int numeroDePaginas) {
        this.titulo = titulo;
        this.autor = autor;
        this.numeroDePaginas = numeroDePaginas;
    }

    // Método para mostrar un resumen
    public void mostrarResumen() {
        System.out.println("'" + titulo + "', escrito por " + autor + ", tiene " + numeroDePaginas + " páginas.");
    }

    public static void main(String[] args) {
        Libro miLibro = new Libro("Cien Años de Soledad", "Gabriel García Márquez", 496);
        miLibro.mostrarResumen();
    }
}

Ejercicio 6: Clase CuentaBancaria con Saldo

Problema: Diseña una clase CuentaBancaria con un atributo saldo. Incluye métodos para depositar() y retirar() dinero. El método retirar no debe permitir que el saldo quede negativo.

// Archivo: CuentaBancaria.java
public class CuentaBancaria {
    private double saldo; // Usamos 'private' para proteger el acceso directo

    public CuentaBancaria(double saldoInicial) {
        this.saldo = saldoInicial;
    }

    // Método para depositar dinero
    public void depositar(double cantidad) {
        if (cantidad > 0) {
            saldo += cantidad;
            System.out.println("Depósito exitoso. Nuevo saldo: $" + saldo);
        }
    }

    // Método para retirar dinero
    public void retirar(double cantidad) {
        if (cantidad > 0 && cantidad <= saldo) {
            saldo -= cantidad;
            System.out.println("Retiro exitoso. Nuevo saldo: $" + saldo);
        } else {
            System.out.println("Fondos insuficientes o cantidad no válida.");
        }
    }
    
    // Método para consultar el saldo
    public double getSaldo() {
        return saldo;
    }

    public static void main(String[] args) {
        CuentaBancaria miCuenta = new CuentaBancaria(1000.0);
        System.out.println("Saldo inicial: $" + miCuenta.getSaldo());

        miCuenta.depositar(500.0);
        miCuenta.retirar(200.0);
        miCuenta.retirar(1500.0); // Esto no debería ser posible
    }
}

Ejercicio 7: Clase Producto con Precio e IVA

Problema: Crea una clase Producto con los atributos nombre y precio. Añade un método que calcule y devuelva el precio final incluyendo un IVA del 21%.

// Archivo: Producto.java
public class Producto {
    String nombre;
    double precio;
    final double IVA = 0.21; // Usamos 'final' para definir una constante

    public Producto(String nombre, double precio) {
        this.nombre = nombre;
        this.precio = precio;
    }

    // Método para calcular el precio final con IVA
    public double calcularPrecioFinal() {
        double impuesto = precio * IVA;
        return precio + impuesto;
    }

    public static void main(String[] args) {
        Producto miProducto = new Producto("Laptop", 1200.50);
        
        System.out.println("El precio final de la " + miProducto.nombre + " es: $" + miProducto.calcularPrecioFinal());
    }
}

Ejercicio 8: Clase Pelicula con Director y Género

Problema: Define una clase Pelicula con los atributos titulo, director y genero. Incluye un método que imprima la ficha técnica de la película.

// Archivo: Pelicula.java
public class Pelicula {
    String titulo;
    String director;
    String genero;

    public Pelicula(String titulo, String director, String genero) {
        this.titulo = titulo;
        this.director = director;
        this.genero = genero;
    }

    // Método para mostrar la ficha técnica
    public void mostrarFicha() {
        System.out.println("----- Ficha Técnica -----");
        System.out.println("Título: " + titulo);
        System.out.println("Director: " + director);
        System.out.println("Género: " + genero);
        System.out.println("-------------------------");
    }

    public static void main(String[] args) {
        Pelicula miPelicula = new Pelicula("Pulp Fiction", "Quentin Tarantino", "Crimen/Drama");
        miPelicula.mostrarFicha();
    }
}

Ejercicio 9: Clase Reloj con Horas y Minutos

Problema: Crea una clase Reloj con los atributos horas y minutos. Incluye un método que muestre la hora en formato «HH:MM».

// Archivo: Reloj.java
public class Reloj {
    int horas;
    int minutos;

    public Reloj(int horas, int minutos) {
        // Simple validación para mantener los valores en un rango lógico
        this.horas = (horas >= 0 && horas < 24) ? horas : 0;
        this.minutos = (minutos >= 0 && minutos < 60) ? minutos : 0;
    }

    // Método para mostrar la hora formateada
    public void mostrarHora() {
        // String.format para asegurar dos dígitos (ej. 09:05)
        System.out.println(String.format("%02d:%02d", horas, minutos));
    }

    public static void main(String[] args) {
        Reloj miReloj = new Reloj(9, 5);
        miReloj.mostrarHora(); // Salida: 09:05

        Reloj otroReloj = new Reloj(14, 30);
        otroReloj.mostrarHora(); // Salida: 14:30
    }
}

Ejercicio 10: Clase Mascota con Sonido

Problema: Diseña una clase Mascota con los atributos nombre y tipo (ej. «Perro», «Gato»). Añade un método hacerSonido() que imprima «Guau guau» si es un perro, «Miau miau» si es un gato, y un mensaje genérico para otros tipos.

// Archivo: Mascota.java
public class Mascota {
    String nombre;
    String tipo;

    public Mascota(String nombre, String tipo) {
        this.nombre = nombre;
        this.tipo = tipo;
    }

    // Método que simula el sonido de la mascota
    public void hacerSonido() {
        // Usamos equalsIgnoreCase para comparar strings sin importar mayúsculas/minúsculas
        if (tipo.equalsIgnoreCase("Perro")) {
            System.out.println(nombre + " dice: Guau guau!");
        } else if (tipo.equalsIgnoreCase("Gato")) {
            System.out.println(nombre + " dice: Miau miau!");
        } else {
            System.out.println(nombre + " hace un sonido genérico.");
        }
    }

    public static void main(String[] args) {
        Mascota perro = new Mascota("Fido", "Perro");
        Mascota gato = new Mascota("Misi", "Gato");
        Mascota hamster = new Mascota("Pipo", "Hámster");

        perro.hacerSonido();
        gato.hacerSonido();
        hamster.hacerSonido();
    }
}

Preguntas Frecuentes (FAQs)

¿Qué es la palabra clave this?

La palabra clave this se utiliza dentro de un método o constructor de una instancia para referirse al objeto actual. Es muy útil para desambiguar entre los atributos de la clase y los parámetros de un método cuando tienen el mismo nombre, como en this.nombre = nombre;.

¿Para qué sirve el main dentro de las clases de los ejercicios?

El método public static void main(String[] args) es el punto de entrada de cualquier programa Java. Lo hemos incluido en cada clase para que puedas ejecutar cada ejercicio de forma independiente y probar su funcionalidad directamente sin necesidad de crear archivos adicionales.

¿Puedo tener varias clases en un mismo archivo .java?

Sí, pero solo una de ellas puede ser public y el archivo debe llamarse igual que esa clase pública. Generalmente, es una buena práctica mantener cada clase en su propio archivo para una mejor organización.

¡Has dado un gran paso!

¡Felicidades! Si has llegado hasta aquí y has intentado resolver los ejercicios, has fortalecido enormemente tu comprensión sobre clases y objetos, el corazón de Java. Recuerda que la programación es como un deporte: la práctica constante es la clave para mejorar. No te desanimes si algo no salió a la primera; lo importante es entender el porqué y seguir adelante.

Estos conceptos son la base para temas más avanzados como la herencia, el polimorfismo y la encapsulación. ¡Sigue así y pronto estarás construyendo aplicaciones complejas con confianza!

¿Te ha gustado este artículo? ¿Quieres seguir aprendiendo y dominar Java? ¡Visita nuestro blog para encontrar más tutoriales, ejercicios y consejos que te ayudarán en tu camino como desarrollador!

No pares de aprender¡Hay mucho más esperándote! Sigue aprendiendo dentro y fuera de nuestra web.
Ejercicios de Java, Javascript, Python, PHP, MySQL y mucho más
Comparte este artículo
Alejandro Nes
Alejandro Nes

¡Hola! Soy Alejandro Nes, desarrollador web con formación en informática y apasionado por la creación de contenido educativo. Aprendamos juntos a programar :)

Artículos: 24