13.8 Herencia y polimorfismo en Java: concepto de polimorfismo

El concepto de polimorfismo es uno de los pilares fundamentales de la programación orientada a objetos (POO), y Java, al ser un lenguaje que adopta este paradigma, ofrece soporte total para esta característica. El término polimorfismo proviene del griego "polys", que significa muchos, y "morphē", que significa forma. En programación, esto se refiere a la capacidad de una variable, función u objeto de adoptar diversas formas.

Polimorfismo en Java

En Java, el polimorfismo se manifiesta principalmente de dos maneras: sobrecargando el polimorfismo y anulando. El primero se refiere a la capacidad de tener múltiples funciones con el mismo nombre pero diferentes listas de parámetros dentro de la misma clase. El segundo, que es el tema central de este texto, está relacionado con la herencia y permite que una clase secundaria proporcione una implementación específica de un método que ya proporciona una de sus clases principales o superclases.

Herencia y polimorfismo

La herencia permite que una nueva clase, conocida como subclase, herede campos y métodos de otra clase, llamada superclase. El polimorfismo de sustitución entra en juego cuando una subclase redefine un método de la superclase. Esto permite que la subclase se especialice o modifique el comportamiento del método heredado. Cuando se utiliza un objeto de subclase, se llamará al método redefinido, incluso si la referencia es del tipo superclase.

Ejemplo de polimorfismo


clase animal {
    sonido vacío() {
        System.out.println("El animal emite un sonido");
    }
}

clase Perro extiende Animal {
    @Anular
    sonido vacío() {
        System.out.println("El perro ladra");
    }
}

clase Gato extiende Animal {
    @Anular
    sonido vacío() {
        System.out.println("El gato maúlla");
    }
}

clase pública PruebaPolimorfismo {
    público estático vacío principal (String [] argumentos) {
        Animal miAnimal = nuevo Animal();
        Animal miPerro = nuevo Perro();
        Animal miGato = nuevo Gato();

        miAnimal.sonido(); // Salida: El animal emite un sonido.
        miPerro.sonido(); // Salida: El perro ladra
        miGato.sonido(); // Salida: El gato maúlla
    }
}

En el ejemplo anterior, la clase Animal tiene un método sound() que se redefine (anula) en las clases Dog y < código> Gato. Aunque las referencias myCachorro y myCat son de tipo Animal, los métodos llamados son los de las clases reales de los objetos, es decir, Perro y Gato, respectivamente. Esto es polimorfismo en acción.

Beneficios del polimorfismo

El polimorfismo aporta varios beneficios al desarrollo de software, entre ellos:

  • Flexibilidad: le permite escribir código que puede funcionar con objetos de diferentes tipos y clases.
  • Reutilización de código: Se puede utilizar el mismo código para interactuar con objetos de diferentes clases que se derivan de la misma superclase.
  • Mantenibilidad: Facilita el mantenimiento y la actualización del código, ya que los cambios en una superclase pueden ser heredados automáticamente por las subclases.

Interfaces y polimorfismo

Además de la herencia de clases, el polimorfismo en Java también se puede lograr a través de interfaces. Una interfaz define un contrato que deben seguir las clases concretas, especificando los métodos que deben implementarse. Dado que una clase implementa una interfaz, se puede hacer referencia a cualquier objeto de esa clase como del tipo de la interfaz. Esto permite que diferentes clases que implementan la misma interfaz sean tratadas polimórficamente.


Interfaz animal {
    sonido vacío();
}

clase Perro implementa Animal {
    @Anular
    sonido público vacío() {
        System.out.println("El perro ladra");
    }
}

clase Gato implementa Animal {
    @Anular
    sonido público vacío() {
        System.out.println("El gato maúlla");
    }
}

clase pública TestInterfacePolymorfismo {
    público estático vacío principal (String [] argumentos) {
        Animal miPerro = nuevo Perro();
        Animal miGato = nuevo Gato();

        miPerro.sonido(); // Salida: El perro ladra
        miGato.sonido(); // Salida: El gato maúlla
    }
}

En el ejemplo anterior, Animal es una interfaz y las clases Dog y Cat implementan esta interfaz. Esto permite hacer referencia a objetos de ambas clases como objetos de tipo Animal y el código puede interactuar con ellos de forma polimórfica.

Consideraciones finales

El polimorfismo es un concepto poderoso que permite la construcción de sistemas flexibles y fácilmente extensibles. En Java, implementar el polimorfismo es sencillo y natural, gracias a su soporte rob.Uso de programación orientada a objetos. Comprender y aplicar correctamente el polimorfismo es esencial para cualquier desarrollador de Java que desee crear código reutilizable, mantenible y escalable.

Ahora responde el ejercicio sobre el contenido:

¿Cuál de las siguientes afirmaciones describe mejor el polimorfismo de sustitución en Java, como se explica en el texto?

¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.

¡Tú error! Inténtalo de nuevo.

Imagen del artículo Herencia y polimorfismo en Java: polimorfismo en tiempo de ejecución

Siguiente página del libro electrónico gratuito:

93Herencia y polimorfismo en Java: polimorfismo en tiempo de ejecución

4 minutos

¡Obtén tu certificado para este curso gratis! descargando la aplicación Cursa y leyendo el libro electrónico allí. ¡Disponible en Google Play o App Store!

Disponible en Google Play Disponible en App Store

+ 6,5 millones
estudiantes

Certificado gratuito y
válido con código QR

48 mil ejercicios
gratis

Calificación de 4.8/5
en tiendas de aplicaciones

Cursos gratuitos de
vídeo, audio y texto.