¿Qué son la herencia y el polimorfismo en los tipos de datos referenciales?
sobes.tech AI
Respuesta de la IA
La herencia es un mecanismo que permite a una nueva clase (subclase/hija) heredar propiedades (campos) y comportamientos (métodos) de una clase existente (superclase/padre), ampliando o sobrescribiendo la funcionalidad. Esto fomenta la reutilización del código y establece relaciones de "es un" (is-a).
El polimorfismo es la capacidad de objetos de diferentes clases para responder de manera diferente a una misma llamada de método, dependiendo de su tipo específico en tiempo de ejecución. Proporciona flexibilidad y extensibilidad al código, permitiendo manejar objetos de subclases a través de referencias a la superclase.
En los tipos de datos por referencia (clases), estos conceptos juegan un papel clave:
- Herencia: La subclase tiene acceso a los miembros de la superclase y puede agregar los suyos propios o modificar el comportamiento de los métodos heredados (sobrescritura - overriding). Un objeto de la subclase puede ser utilizado en cualquier lugar donde se espere un objeto de la superclase.
- Polimorfismo: Diferentes objetos relacionados con una misma jerarquía de herencia pueden ser tratados con el mismo código, llamando al mismo método, pero la implementación de ese método será específica para el tipo de objeto en tiempo de ejecución.
Ejemplo en Java:
// Superclase (padre)
class Animal {
public void makeSound() {
System.out.println("Hace un sonido");
}
}
// Subclase (hija), hereda de Animal
class Dog extends Animal {
// Sobrescribe el método de la superclase
@Override
public void makeSound() {
System.out.println("¡Guau!");
}
}
// Subclase (hija), hereda de Animal
class Cat extends Animal {
// Sobrescribe el método de la superclase
@Override
public void makeSound() {
System.out.println("¡Miau!");
}
}
// Ejemplo de polimorfismo
public class PolymorphismExample {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // objeto de la superclase
Animal myDog = new Dog(); // objeto de la subclase, referencia a la superclase
Animal myCat = new Cat(); // objeto de la subclase, referencia a la superclase
myAnimal.makeSound(); // Imprime: Hace un sonido
myDog.makeSound(); // Imprime: ¡Guau! (polimorfismo - se llama al método de Dog)
myCat.makeSound(); // Imprime: ¡Miau! (polimorfismo - se llama al método de Cat)
}
}