10 Ejercicios resueltos de Métodos y Constructores en Java

Aprende a crear Métodos y Constructores en Java con 10 ejercicios resueltos. Domina la sobrecarga y fortalece tus bases en la programación orientada a objetos.

Si las clases son los planos y los objetos son las casas, los métodos son las acciones que puedes realizar en ellas (como abrir una puerta) y los constructores son el proceso de construcción en sí. Entender cómo funcionan es crucial para que tus programas hagan cosas útiles. En este artículo, desmitificaremos estos conceptos clave con explicaciones sencillas y 10 ejercicios prácticos que te convertirán en un mejor programador. ¡Manos al código!

Aprendizaje Teórico: ¿Qué Son los Métodos y Constructores?

Antes de programar, es vital entender estas dos piezas del rompecabezas de la Programación Orientada a Objetos (POO).

Métodos: Las Acciones de tus Objetos

Un método es un bloque de código que contiene una serie de instrucciones. Piensa en él como una habilidad o una acción que un objeto puede realizar. Por ejemplo, un objeto Coche podría tener los métodos acelerar(), frenar() y encenderLuces(). Los métodos nos ayudan a organizar el código, hacerlo reutilizable y más fácil de leer.

La estructura básica de un método es:

visibilidad tipoDeRetorno nombreDelMetodo(parametros) { // Cuerpo del método }

  • tipoDeRetorno: El tipo de dato que el método devolverá (ej. int, String, void si no devuelve nada).
  • nombreDelMetodo: El nombre que le damos a la acción.
  • parametros: Los datos de entrada que el método necesita para funcionar (opcional).

Constructores: El Nacimiento de tus Objetos

Un constructor es un tipo especial de método que se llama automáticamente cuando se crea un objeto (una instancia) de una clase. Su principal propósito es inicializar los atributos del objeto, asegurando que nazca con un estado válido.

Características clave de un constructor:

  • Tiene exactamente el mismo nombre que la clase.
  • No tiene tipo de retorno, ni siquiera void.

Sobrecarga: Un Nombre, Múltiples Formas

La sobrecarga (overloading) es una potente característica de Java que permite definir varios métodos o constructores en la misma clase con el mismo nombre, siempre y cuando sus listas de parámetros sean diferentes (ya sea en el número de parámetros o en el tipo de dato de los mismos). Esto nos da flexibilidad para realizar acciones similares con diferentes tipos de entrada.

¡Tu Turno! Intenta Resolverlo Primero

La mejor forma de aprender es haciendo. Antes de saltar a la solución de cada ejercicio, tómate un momento para leer el problema, analizarlo y escribir tu propio código. No te preocupes si no es perfecto; el objetivo es que actives tu lógica de programación. ¡Luego, compara tu enfoque con el nuestro y aprende de las diferencias!

10 Ejercicios Resueltos de Métodos y Constructores

Ejercicio 1: El Saludo Universal

Problema: Crea una clase Persona con un método saludar() que no reciba parámetros y no devuelva nada, simplemente debe imprimir «¡Hola! ¿Cómo estás?» en la consola.

// Archivo: Persona.java
public class Persona {

    // Método que no recibe parámetros y no retorna valor (void)
    public void saludar() {
        System.out.println("¡Hola! ¿Cómo estás?");
    }

    public static void main(String[] args) {
        // Creamos un objeto de la clase Persona
        Persona persona1 = new Persona();
        
        // Llamamos a su método saludar()
        persona1.saludar();
    }
}

Ejercicio 2: Saludo Personalizado

Problema: Mejora la clase Persona anterior. Ahora el método saludar() debe recibir un parámetro de tipo String con un nombre y personalizar el saludo, por ejemplo: «¡Hola, Ana! ¿Cómo estás?».

// Archivo: Persona.java
public class Persona {

    // Método que recibe un parámetro de tipo String
    public void saludar(String nombre) {
        System.out.println("¡Hola, " + nombre + "! ¿Cómo estás?");
    }

    public static void main(String[] args) {
        Persona persona1 = new Persona();
        
        // Llamamos al método pasándole un argumento
        persona1.saludar("Ana");
    }
}

Ejercicio 3: Suma de Dos Números

Problema: Crea una clase Calculadora con un método sumar() que reciba dos números enteros como parámetros y devuelva su suma.

// Archivo: Calculadora.java
public class Calculadora {

    // Método que recibe dos enteros y retorna su suma (int)
    public int sumar(int numero1, int numero2) {
        return numero1 + numero2;
    }

    public static void main(String[] args) {
        Calculadora miCalculadora = new Calculadora();
        
        // Llamamos al método y guardamos el resultado en una variable
        int resultado = miCalculadora.sumar(10, 5);
        
        System.out.println("El resultado de la suma es: " + resultado); // Salida: 15
    }
}

Ejercicio 4: El Constructor por Defecto

Problema: Crea una clase Gato con un atributo nombre. Añade un constructor por defecto (sin parámetros) que inicialice el nombre del gato a «Anónimo».

// Archivo: Gato.java
public class Gato {
    String nombre;

    // Constructor por defecto (sin parámetros)
    public Gato() {
        this.nombre = "Anónimo"; // Inicializa el nombre
        System.out.println("Se ha creado un gato llamado " + this.nombre);
    }

    public static void main(String[] args) {
        // Al crear el objeto, se llama automáticamente al constructor
        Gato gato1 = new Gato();
    }
}

Ejercicio 5: Constructor con Parámetros

Problema: Modifica la clase Gato. Ahora, el constructor debe recibir un String como parámetro para asignarle ese nombre al gato al momento de su creación.

// Archivo: Gato.java
public class Gato {
    String nombre;

    // Constructor que recibe un parámetro para inicializar el atributo
    public Gato(String nombre) {
        this.nombre = nombre; // 'this.nombre' es el atributo, 'nombre' es el parámetro
    }

    public void maullar() {
        System.out.println(this.nombre + " dice: ¡Miau!");
    }

    public static void main(String[] args) {
        // Creamos el objeto pasándole el nombre al constructor
        Gato miGato = new Gato("Pelusa");
        miGato.maullar();
    }
}

Ejercicio 6: Clase Termo con Métodos y Constructor

Problema: Diseña una clase Termo con los atributos marca y capacidad (en litros). Incluye un constructor para inicializar ambos atributos y un método cebar() que imprima un mensaje.

// Archivo: Termo.java
public class Termo {
    String marca;
    double capacidad;

    // Constructor para inicializar los atributos
    public Termo(String marca, double capacidad) {
        this.marca = marca;
        this.capacidad = capacidad;
    }

    // Método de la clase
    public void cebar() {
        System.out.println("Cebando un mate con el termo " + this.marca + " de " + this.capacidad + "L.");
    }

    public static void main(String[] args) {
        Termo miTermo = new Termo("Stanley", 1.2);
        miTermo.cebar();
    }
}

Ejercicio 7: Sobrecarga de Métodos

Problema: En la clase Calculadora, sobrecarga el método sumar() para que también pueda sumar dos números de tipo double.

// Archivo: Calculadora.java
public class Calculadora {

    // Método para sumar enteros
    public int sumar(int a, int b) {
        System.out.println("Sumando enteros...");
        return a + b;
    }

    // Sobrecarga del método para sumar doubles
    public double sumar(double a, double b) {
        System.out.println("Sumando doubles...");
        return a + b;
    }

    public static void main(String[] args) {
        Calculadora calc = new Calculadora();
        System.out.println("Resultado: " + calc.sumar(5, 4));      // Llama a la versión de int
        System.out.println("Resultado: " + calc.sumar(5.5, 4.2)); // Llama a la versión de double
    }
}

Ejercicio 8: Sobrecarga de Constructores

Problema: Crea una clase Producto con atributos nombre y precio. Sobrecarga el constructor para que se pueda crear un producto de dos formas: solo con el nombre (precio por defecto en 0.0) o con nombre y precio.

// Archivo: Producto.java
public class Producto {
    String nombre;
    double precio;

    // Constructor 1: solo recibe el nombre
    public Producto(String nombre) {
        this.nombre = nombre;
        this.precio = 0.0; // Precio por defecto
    }

    // Constructor 2 (sobrecargado): recibe nombre y precio
    public Producto(String nombre, double precio) {
        this.nombre = nombre;
        this.precio = precio;
    }

    public void mostrarInfo() {
        System.out.println("Producto: " + nombre + ", Precio: $" + precio);
    }

    public static void main(String[] args) {
        Producto p1 = new Producto("Taza"); // Usa el primer constructor
        Producto p2 = new Producto("Laptop", 999.99); // Usa el segundo constructor

        p1.mostrarInfo();
        p2.mostrarInfo();
    }
}

Ejercicio 9: Clase Usuario

Problema: Crea una clase Usuario con atributos username y password. Añade un constructor para inicializarlos y un método login() que reciba un usuario y contraseña y devuelva true si coinciden con los del objeto y false en caso contrario.

// Archivo: Usuario.java
public class Usuario {
    String username;
    String password;

    public Usuario(String username, String password) {
        this.username = username;
        this.password = password;
    }

    // Método que verifica las credenciales
    public boolean login(String username, String password) {
        // Compara el input con los atributos del objeto
        return this.username.equals(username) && this.password.equals(password);
    }

    public static void main(String[] args) {
        Usuario user = new Usuario("admin", "12345");

        if (user.login("admin", "12345")) {
            System.out.println("Acceso concedido.");
        } else {
            System.out.println("Acceso denegado.");
        }
    }
}

Ejercicio 10: Conversor de Temperatura

Problema: Diseña una clase Conversor con dos métodos: celsiusAFahrenheit() que reciba grados Celsius y devuelva su equivalente en Fahrenheit ($F = C \* 9/5 + 32$), y fahrenheitACelsius() que haga la conversión inversa ($C = (F – 32) \* 5/9$).

// Archivo: Conversor.java
public class Conversor {

    // Método para convertir de Celsius a Fahrenheit
    public double celsiusAFahrenheit(double celsius) {
        return (celsius * 9.0 / 5.0) + 32;
    }

    // Método para convertir de Fahrenheit a Celsius
    public double fahrenheitACelsius(double fahrenheit) {
        return (fahrenheit - 32) * 5.0 / 9.0;
    }

    public static void main(String[] args) {
        Conversor conversor = new Conversor();
        double tempCelsius = 25.0;
        double tempFahrenheit = 77.0;

        System.out.println(tempCelsius + "°C son " + conversor.celsiusAFahrenheit(tempCelsius) + "°F");
        System.out.println(tempFahrenheit + "°F son " + conversor.fahrenheitACelsius(tempFahrenheit) + "°C");
    }
}

Preguntas Frecuentes (FAQs)

¿Cuál es la principal diferencia entre un método y un constructor?

La principal diferencia es su propósito y su sintaxis. Un constructor se usa para crear e inicializar un objeto y debe tener el mismo nombre que la clase, sin tipo de retorno. Un método se usa para definir un comportamiento o acción del objeto, tiene su propio nombre y debe especificar un tipo de retorno (incluso void).

¿Por qué es útil la sobrecarga de métodos?

La sobrecarga mejora la legibilidad y la usabilidad del código. Te permite usar el mismo nombre de método para operaciones conceptualmente similares pero que se aplican a diferentes tipos o cantidades de datos. Por ejemplo, en lugar de tener sumarInt(), sumarDouble(), sumarTresNumeros(), puedes simplemente tener un único nombre, sumar, y Java sabrá cuál versión llamar según los argumentos que le pases.

¿Qué pasa si no defino ningún constructor en mi clase?

Si no escribes ningún constructor, Java proporciona uno por defecto automáticamente. Este es un constructor público y sin parámetros que no hace nada, pero permite que puedas crear objetos de esa clase (new MiClase();). Sin embargo, si defines cualquier otro constructor (por ejemplo, uno con parámetros), Java ya no añadirá el constructor por defecto.

¡Ahora tus objetos tienen superpoderes!

¡Excelente trabajo! Has aprendido a darles vida y comportamiento a tus objetos a través de métodos y a controlar su creación con constructores. Estos dos conceptos son la base de la interacción en cualquier programa orientado a objetos. Dominarlos te permite escribir código más limpio, organizado y reutilizable.

Sigue practicando, crea tus propias clases con métodos y constructores personalizados. La curiosidad y la práctica constante son tus mejores aliadas en este viaje de la programación.

¿Listo para tu siguiente desafío? ¡Visita nuestro blog para descubrir más tutoriales sobre Java, desde conceptos básicos hasta temas avanzados, y sigue construyendo tu futuro 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