Herencia es un concepto central en la programación orientada a objetos (OOP) y a menudo se considera uno de los pilares para aumentar la eficiencia. En este tutorial, profundizarás tu comprensión sobre la herencia en Java. Aprenderás cómo manejar modificadores de acceso, utilizar constructores y cuál es el papel del encapsulamiento en la herencia.

Principales hallazgos

  • La herencia permite heredar propiedades y métodos de una clase.
  • El modificador de acceso private restringe el acceso a las variables o métodos, mientras que protected permite un acceso ampliado dentro de las clases que heredan de la clase original.
  • Los constructores deben ser llamados en la subclase para instanciar objetos correctamente.
  • Los métodos de la interfaz se pueden utilizar de manera generalizada cuando se tienen varias clases específicas.

Guía paso a paso

Modificadores de acceso: protected vs. private

Si declaras una variable (por ejemplo, color) como protected en una clase como Vehiculo, entonces puedes utilizar esta variable directamente en una clase derivada (por ejemplo, Coche). Sin embargo, si declaras la variable como private, no podrás acceder a ella directamente en la subclase.

Herencia en Java - Conceptos básicos y ejemplos

Esto significa concretamente que el acceso a variables private solo es posible a través de métodos setter y getter.

El ejemplo muestra que debemos usar setColor y getColor para acceder a la variable private color.

Herencia en Java - Fundamentos y ejemplos

Si la variable se declara como protected, puedes acceder a ella fácilmente dentro de la clase Coche y cambiar el valor.

Uso de constructores en la herencia

Al definir una subclase, debes asegurarte de que el constructor de la superclase se llame correctamente.

Herencia en Java - Fundamentos y ejemplos

Esto asegura que el color se inicialice correctamente al crear un objeto Coche.

Herencia en Java - Fundamentos y ejemplos

Asegúrate de definir un constructor en la subclase que pase adecuadamente los parámetros de la superclase.

Herencia y llamadas a métodos

Dos clases, Vehiculo y Coche, te permiten usar variables y métodos generales. Si defines un método en Vehiculo, también puedes usar este método en Coche sin tener que reescribirlo.

Herencia en Java - Fundamentos y Ejemplos

Aquí se llama al método mostrarColorVehiculo y se imprime el valor del color que proporciona el método getColor.

Restricciones en el acceso a métodos

Si intentas llamar a un método en una subclase que no está disponible para la clase, recibirás un error de compilación. En nuestro ejemplo, se debe pasar un objeto Vehiculo para llamar al método getColor.

Herencia en Java - Fundamentos y ejemplos

Esto significa, en la práctica, que debes asegurarte de que el método se ajuste a tu tipo de datos antes de llamarlo. Así, puedes pasar una bicicleta, un coche o ambos a un método que simplemente espera objetos de Vehiculo.

Ejemplo de llamada a métodos de instancia en contextos estáticos

Ten en cuenta que en métodos estáticos (static) no se puede usar la palabra clave this, ya que no se refiere a una instancia específica. En tales casos, es posible que debas utilizar otro método o reestructurar la lógica.

Herencia en Java - Fundamentos y ejemplos

Este llamado imprimirá correctamente el color para el objeto miCoche.

Resumen - Herencia en Java: Una guía para principiantes

La herencia es un concepto importante en la programación con Java, que te ayuda a modularizar y reutilizar el código. En este tutorial has aprendido los fundamentos de modificadores de acceso, constructores y llamadas a métodos en relación con la herencia.

Preguntas frecuentes

¿Cómo puedo acceder a variables privadas en la subclase?No se puede acceder directamente a variables privadas en la subclase. Usa métodos getter y setter.

¿Cuál es la diferencia entre protected y private?protected permite el acceso en la subclase y en el mismo paquete, mientras que private solo es accesible dentro de su propia clase.

¿Debo definir los constructores en la subclase?Sí, si has modificado el constructor de la superclase, también debes definir los constructores en la subclase en consecuencia.

¿Puedo sobrescribir libremente métodos de superclases en subclases?Sí, puedes sobrescribir métodos que no están marcados como final o static en la subclase para implementar un comportamiento específico.