martes, 26 de julio de 2022

💻 Todo sobre HERENCIA en Java

HERENCIA en Java

Si ya entendiste lo que son clases y objetos, atributos y estados, métodos y mensajes, ahora puedes ampliar la información en el presente texto para conocer acerca de la herencia.



Herencia en Java

La herencia es el mecanismo que sirve de soporte para registrar y utilizar las relaciones conceptuales existentes entre las clases. Posibilita la definición de una clase a partir de otra organizando las clases en una estructura jerárquica formando jerarquias de clases.

La idea de la herencia es permitir la creación de nuevas clases basadas en clases existentes. Cuando heredamos de una clase existente, heredamos métodos y campos y agregamos nuevos campos y métodos para cumplir con la nueva situación.

La clase Hija hereda de la clase Padre sus atributos y métodos. A la vez, la clase Hija puede incluir adaptaciones como nuevos atributos, métodos y redefinirlos. Lo mismo pasa con las clases "Nieta" que herendan a su vez los métodos y atributos de la clase Hija.

Para indicar que una clase deriva de otra, heredando sus métodos y atributos, se usa el término extends.

public class Hija1 extends Padre {
int c;
	Hija1 () {
		a=0; // Herencia de Padre
		b=0; // Herencia de Padre
		c=0; // Nuevo atributo
		}
}
			

Para controlar el acceso desde otras clases y para controlar la herencia por las subclases, los atributos y métodos de las clases tienen tres modificadores para controlar el acceso:

  • Public: Los atributos y métodos declarados public son accesibles para cualquier clase y son heredados por las subclases.
  • Private: Los atributos y métodos declarados private sólo son accesibles para la propia clase.
  • Protected: Los atributos y métodos declarados protected son sólo accesibles para la propia clase y para las subclases de esta.

El mecanismo de la herencia se utiliza mucho en POO (Programación orientada a objetos), por lo que es importante recordar su utilidad.


Heredar de una clase ayuda a «especializar» determinados comportamientos y algunas de sus propiedades, aprovechando sus servicios básicos y, de esta manera, evitando cualquier redundancia de código.


Java y C# solo permiten una única herencia por nivel (al contrario que C++), pero es posible heredar de una clase en sí misma ya heredada y así sucesivamente, para formar una jerarquía de clases que partan de la más global hasta la más detallada.

Ejemplo de jerarquía de clases

 Todo sobre HERENCIA en Java

Por defecto, una clase puede servir de «padre» a varias clases. Sin ninguna duda, el mejor ejemplo es java.lang.Object, que es la clase raíz de todos los tipos -y por lo tanto, de todas las clases- de Java. Recordemos que esta herencia está implícita y no necesita ninguna definición particular.


JERARQUÍAS DE HERENCIA EN JAVA. SUPERCLASES Y SUBCLASES.


En Java muchas subclases pueden heredar de una misma superclase, y a su vez una subclase puede convertirse en superclase de otra. Así las cosas, podemos hablar de una jerarquía de herencia. La jerarquía es el esquema organizativo de las clases con relación de herencia entre sí.

En un proyecto nosotros definimos nuestra propia jerarquía de herencia.

herencia, java, jerarquía

Las clases del API (Application Programming Interface) de Java igualmente tienen establecida una jerarquía de herencia, en este caso definida por el equipo de desarrollo del lenguaje de la multinacional Oracle.

herencia, java, jerarquía

La herencia es una técnica de abstracción que nos permite agrupar objetos con características comunes. Todas las aplicaciones Java usan herencia, aunque no lo hagan de forma explícita. Esto es así porque cuando creamos una clase sin ninguna referencia a una superclase, el propio compilador inserta en la clase creada una relación de herencia directa con la la clase java.lang.Object. Por este motivo todos los objetos, sean de la clase que sean, pueden invocar métodos de la clase java.lang.Object como equals() y toString(), aunque no siempre se van a obtener buenos resultados así.


Si quisiéramos podríamos escribir para todas las clases public class NombreDeLaClase extends Object, aunque como es algo implícito a Java normalmente no lo escribiremos por ser redundante. En los diagramas representativos de la jerarquía de herencia ocurre lo mismo: Object siempre está en la cabecera del diagrama, aunque normalmente no se represente ya que se da por sobreentendido. Recordar que en Java los tipos primitivos no son objetos: no son instancias de clase, y por tanto no heredan de la superclase Object.

Los campos privados de una superclase no son accesibles por la subclase directamente. Decimos que la subclase no tiene derechos de acceso sobre los campos privados de la superclase. Para acceder a ellos tendrá que hacer uso de métodos de acceso o modificación. Una subclase puede invocar a cualquier método público de su superclase como si fuese propio. Lo veremos con ejemplos.

 Fuentes Consultadas:

1 https://www.ediciones-eni.com/

2 https://www.aprenderaprogramar.com/


Lectura complementaria:
1 https://www.aprenderaprogramar.com/ (Java no permite herencia multiple)

2 https://www.dataprix.com/(Reconoce la herencia multiple)

3 http://jbgarcia.webs.uvigo.es/asignaturas/TO/cursilloCpp/17_herencia_multiple.html

4 https://ifgeekthen.nttdata.com/