11.6. Estructura de clases y objetos en Java: herencia

La herencia es uno de los conceptos fundamentales de la programación orientada a objetos (POO) y, en Java, es una parte crucial que permite una estructura de clases y objetos eficiente y poderosa. La herencia permite que una clase herede campos y métodos de otra clase, promoviendo la reutilización de código y la creación de una jerarquía de clases relacionadas.

¿Qué es la herencia?

La herencia es un mecanismo mediante el cual una nueva clase, llamada subclase, puede adquirir las propiedades de una clase existente, llamada superclase. La herencia facilita la modularidad y la organización del código, lo que permite a los desarrolladores crear clases más especializadas a partir de clases más generales.

Cómo funciona la herencia en Java

En Java, la herencia se realiza con la palabra clave extends. Cuando una clase se deriva de otra clase usando extends, hereda todos los miembros públicos y protegidos (campos, métodos) de la superclase. Los miembros privados de la superclase no se heredan directamente, pero se puede acceder a ellos a través de métodos públicos o protegidos.


clase animal {
    Nombre de cadena;

    public void emitSound() {
        System.out.println("El animal emite un sonido.");
    }
}

clase Perro extiende Animal {

    public void emitSound() {
        System.out.println("El perro ladra: ¡Au Au!");
    }
}

En el ejemplo anterior, la clase Dog hereda de la clase Animal. Esto significa que un objeto Dog tendrá acceso al campo name y podrá llamar al método emitSound().

Anulación de método

En herencia, la subclase tiene la capacidad de anular los métodos de la superclase. Esto se hace para definir un comportamiento específico en la subclase. En el ejemplo anterior, el método Sound() se anula en la clase Dog para reflejar el sonido específico que hace un perro.

Usando super

La palabra clave super se utiliza para hacer referencia directamente al objeto de superclase. Puede usarse para llamar al constructor de la superclase, así como para acceder a métodos que han sido anulados por la subclase.


clase Gato extiende Animal {

    Gato público() {
        super.nombre = "Gato";
    }

    public void emitSound() {
        super.emitSound(); // Llama al método de superclase
        System.out.println("El gato maúlla: ¡Miau!");
    }
}

En el ejemplo anterior, el constructor de la clase Cat asigna un valor al campo name de la superclase Animal. Y el método emitarSound() primero llama al método de la superclase antes de agregar su propio comportamiento.

Herencia y Constructores

En Java, los constructores no se heredan. Sin embargo, la subclase puede llamar a los constructores de la superclase usando la palabra clave super. Esto normalmente se hace en la primera línea del constructor de la subclase.


clase Pájaro extiende Animal {

    pájaro público() {
        súper(); // Llama al constructor de la superclase
        // Otras inicializaciones
    }
}

Es importante tener en cuenta que si la superclase no tiene un constructor sin argumentos (un constructor predeterminado), la subclase debe llamar explícitamente a uno de los constructores disponibles de la superclase.

Modificadores de acceso y herencia

Los modificadores de acceso en Java definen cómo se puede acceder a los miembros de una clase. En herencia, estos modificadores determinan lo que hereda la subclase:

  • Público: los miembros públicos son heredados por la subclase y son accesibles desde cualquier otra clase.
  • Protegido: los miembros protegidos son heredados por la subclase y son accesibles dentro del mismo paquete o por subclases en diferentes paquetes.
  • Privado: La subclase no hereda los miembros privados, pero se puede acceder a ellos indirectamente a través de métodos públicos o protegidos de la superclase.

Herencia y polimorfismo

El polimorfismo es otro concepto clave de programación orientada a objetos que permite que objetos de diferentes subclases sean tratados como objetos de la superclase. Esto es posible gracias a la herencia y permite utilizar un mismo método en diferentes contextos, dependiendo del tipo de objeto que lo invoca.


Animal miAnimal = nuevo Perro();
miAnimal.emitSound(); // Salida: El perro ladra: ¡Au Au!

En el ejemplo anterior, incluso si myAnimal es del tipo Animal, el método emitSound() que se llama es el de la clase Perro, gracias al polimorfismo.

Consideraciones finales sobre la herencia

La herencia es una herramienta poderosa, pero debe usarse con cuidado. la tuUna herencia excesiva puede dar lugar a jerarquías de clases complejas y difíciles de mantener. Es importante diseñar sistemas con herencia sólo cuando tenga sentido conceptualmente, y no sólo para reutilizar código. La composición, donde una clase contiene otra clase, a menudo puede ser una alternativa más flexible a la herencia.

En resumen, la herencia en Java permite crear una estructura eficiente de clases y objetos, promoviendo la reutilización del código y la organización lógica. Al comprender y aplicar correctamente los conceptos de herencia, anulación de métodos, uso de super, modificadores de acceso y polimorfismo, los desarrolladores pueden crear sistemas robustos y escalables.

Ahora responde el ejercicio sobre el contenido:

_¿Cuál de las siguientes afirmaciones sobre la herencia en Java es correcta?

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

¡Tú error! Inténtalo de nuevo.

Imagen del artículo Estructura de clases y objetos en Java: Polimorfismo

Siguiente página del libro electrónico gratuito:

65Estructura de clases y objetos en Java: Polimorfismo

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.