Herencia y Polimorfismo Interfaces y Clases Abstractas

Capítulo 3: Herencia y Polimorfismo, Interfaces y Clases Abstractas

Compartir

En este capítulo, profundizaremos en la programación orientada a objetos (POO) en Java, centrándonos en los conceptos de herencia y polimorfismo, además de explorar la importancia de las interfaces y clases abstractas. Estos conceptos son fundamentales para crear jerarquías de clases y construir programas más flexibles y reutilizables.

3.1. Herencia y Polimorfismo

Herencia es un concepto clave en POO que permite que una clase herede atributos y métodos de otra. Esto fomenta la reutilización de código y la creación de una jerarquía de clases. Por otro lado, el polimorfismo permite que objetos de clases derivadas se comporten como objetos de la clase base.

Ejemplo 3.1.1: Herencia y Polimorfismo

class Animal {
    void hacerSonido() {
        System.out.println("El animal hace un sonido");
    }
}

class Perro extends Animal {
    void hacerSonido() {
        System.out.println("El perro ladra");
    }
}

public class ProgramaPrincipal {
    public static void main(String[] args) {
        Animal miAnimal = new Perro(); // Polimorfismo
        miAnimal.hacerSonido(); // Salida: El perro ladra
    }
}

Ejercicio 3.1.1: Herencia y Polimorfismo

Crea una clase llamada Fruta con un método obtenerColor(). Luego, crea clases derivadas como Manzana y Banana que sobrescriban el método obtenerColor(). Crea objetos de cada tipo de fruta y muestra sus colores en la consola.

3.2. Interfaces y Clases Abstractas

Interfaces y clases abstractas son herramientas importantes para la abstracción y el diseño flexible. Las interfaces definen un conjunto de métodos que una clase debe implementar, permitiendo que diferentes clases cumplan con un contrato común. Las clases abstractas son clases parcialmente implementadas que pueden contener métodos abstractos, y las clases concretas deben implementarlos.

Ejemplo 3.2.1: Interfaces y Clases Abstractas

interface Forma {
    double calcularArea();
}

class Circulo implements Forma {
    double radio;
    
    Circulo(double radio) {
        this.radio = radio;
    }
    
    public double calcularArea() {
        return Math.PI * radio * radio;
    }
}

public class ProgramaPrincipal {
    public static void main(String[] args) {
        Forma circulo = new Circulo(5.0);
        System.out.println("Área del círculo: " + circulo.calcularArea());
    }
}

Ejercicio 3.2.1: Interfaces y Clases Abstractas

Crea una interfaz Vehiculo con métodos acelerar() y frenar(). Luego, crea clases como Coche y Moto que implementen la interfaz Vehiculo y proporcionen sus propias implementaciones de acelerar y frenar.

Resumen del Capítulo y Ejercicios

  • Resumen de los conceptos clave de este capítulo, incluyendo herencia, polimorfismo, interfaces, clases abstractas y su importancia en la programación orientada a objetos.
  • Completa los ejercicios proporcionados para practicar y fortalecer tu comprensión de estos conceptos fundamentales de POO en Java.

Respuesta ejercicio 3.2.1:

Aquí tienes el código y los pasos necesarios para resolver el ejercicio de crear una interfaz Vehiculo con métodos acelerar()y frenar, y luego crear las clases Coche y Moto que implementen la interfaz y proporcionen sus propias implementaciones:

Paso 1: Creación de la Interfaz Vehiculo

Primero, crea la interfaz Vehiculo con los métodos acelerar() y frenar():

interface Vehiculo {
    void acelerar(int velocidad);
    void frenar();
}

Paso 2: Implementación de la Clase Coche

A continuación, crea la clase Coche que implementa la interfaz Vehiculo y proporciona sus propias implementaciones de acelerar() y frenar():

class Coche implements Vehiculo {
    private int velocidad;

    @Override
    public void acelerar(int velocidad) {
        this.velocidad += velocidad;
        System.out.println("El coche aceleró a " + this.velocidad + " km/h.");
    }

    @Override
    public void frenar() {
        this.velocidad = 0;
        System.out.println("El coche frenó por completo.");
    }
}

Paso 3: Implementación de la Clase Moto

Ahora, crea la clase Moto que también implementa la interfaz Vehiculo y proporciona sus propias implementaciones de acelerar() y frenar():

class Moto implements Vehiculo {
    private int velocidad;

    @Override
    public void acelerar(int velocidad) {
        this.velocidad += velocidad;
        System.out.println("La moto aceleró a " + this.velocidad + " km/h.");
    }

    @Override
    public void frenar() {
        this.velocidad = 0;
        System.out.println("La moto frenó por completo.");
    }
}

Paso 4: Uso de las Clases Coche y Moto

Por último, puedes crear objetos de las clases Coche y Moto y llamar a sus métodos para probar su funcionamiento:

public class ProgramaPrincipal {
    public static void main(String[] args) {
        Coche miCoche = new Coche();
        Moto miMoto = new Moto();

        miCoche.acelerar(60);
        miMoto.acelerar(50);

        miCoche.frenar();
        miMoto.frenar();
    }
}

Resultado Esperado:

El coche aceleró a 60 km/h.
La moto aceleró a 50 km/h.
El coche frenó por completo.
La moto frenó por completo.

Este ejercicio demuestra cómo utilizar una interfaz en Java para definir un contrato común (Vehiculo) y cómo las clases concretas (Coche y Moto) implementan ese contrato proporcionando sus propias implementaciones de los métodos.


Compartir

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *