herencia en Java (con ejemplo)

⚡ Resumen inteligente

herencia en Java Es un mecanismo mediante el cual una clase adquiere los campos y métodos de otra clase a través de la palabra clave `extends`. Promueve la reutilización del código y modela una relación de tipo "es un" entre una superclase y sus subclases.

  • 🧬 Definición de herencia: Una clase adquiere los campos y métodos de otra mediante la extensión.
  • 🇧🇷 Relación "es-un": Modela una jerarquía de clases padre (superclase) y clases hija (subclase).
  • 🗂️ Cinco tipos: Herencia simple, múltiple, multinivel, jerárquica e híbrida.
  • 🚫 Java Limitación: Java No admite herencia múltiple o híbrida a través de clases.
  • 🔑 Palabra clave principal: Permite acceder a las variables, métodos y constructores de la clase padre desde una subclase.
  • ✅ Beneficio: Reutiliza código probado y añade funcionalidades mediante nuevas clases sin modificar las existentes.

herencia en Java

¿Qué es la herencia?

Herencia Es un mecanismo en el que una clase adquiere la propiedad de otra clase. Por ejemplo, un niño hereda los rasgos de sus padres. Con la herencia, podemos reutilizar los campos y métodos de la clase existente. Por tanto, la herencia facilita la reutilización y es un concepto importante de la programación orientada a objetos.

¿Qué es la herencia en Java?

Java Herencia Es un mecanismo en el que una clase adquiere la propiedad de otra clase. En Java, cuando existe una relación "Es-A" entre dos clases, usamos Herencia. La clase padre se llama superclase y la clase heredada se llama subclase. La palabra clave extends La subclase la utiliza para heredar las características de la superclase. La herencia es importante porque permite reutilizar el código.

Java Sintaxis de herencia:

class subClass extends superClass
{
   //methods and fields
}

Tipos de herencia en Java

Aquí están los diferentes tipos de herencia en Java:

  1. Herencia única
  2. Herencia múltiple
  3. Herencia multinivel
  4. Herencia jerárquica
  5. Herencia híbrida

1. Herencia Única:

En herencia única, una clase extiende a otra clase (solo una clase).

Herencia única en Java
Herencia única

En el diagrama anterior, la Clase B extiende solo la Clase A. La Clase A es una superclase y la Clase B es una subclase.

2. Herencia múltiple:

La herencia múltiple es una de las herencias en Java tipos donde una clase se extiende a más de una clase. Java no admite herencia múltiple.

Herencia múltiple en Java

Java Herencia múltiple

Según el diagrama anterior, la Clase C extiende tanto la Clase A como la Clase B.

3. Herencia multinivel:

En herencia multinivel, una clase puede heredar de una clase derivada. Por tanto, la clase derivada se convierte en la clase base de la nueva clase.

Herencia multinivel en Java

Herencia multinivel

Como se muestra en el diagrama, la Clase C es una subclase de B y B es una subclase de Clase A.

4. Herencia jerárquica:

En la herencia jerárquica, una clase es heredada por muchas subclases.


Herencia jerárquica en Java

Herencia jerárquica

Según el ejemplo anterior, las clases B, C y D heredan la misma clase A.

5. Herencia híbrida:

La herencia híbrida es uno de los tipos de herencia en Java que es una combinación de herencia única y múltiple.


Herencia híbrida

Herencia híbrida

Según el ejemplo anterior, todos los miembros públicos y protegidos de la Clase A se heredan a la Clase D, primero a través de la Clase B y en segundo lugar a través de la Clase C.

Nota: Java no admite herencia híbrida/múltiple

herencia en Java Ejemplo

He aquí un ejemplo de herencia en Java:


Ejemplo de Java Herencia

Java Ejemplo de herencia

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

Súper palabra clave

La palabra clave super es similar a la palabra clave “this”. La palabra clave super se puede utilizar para acceder a cualquier miembro de datos o método de la clase padre. La palabra clave super se puede utilizar en variable, método y nivel de constructor.

Sintaxis:

super.<method-name>();

También verifique: esta palabra clave en Java: Qué es y cómo utilizarlo con el ejemplo

Aprenda la herencia en programación orientada a objetos con ejemplos

Considere la misma aplicación bancaria del ejemplo anterior.

Se supone que debemos abrir dos tipos de cuentas diferentes, una de ahorro y otra de cheques (también conocida como corriente).

Herencia en programación orientada a objetos

Comparemos y estudiemos cómo podemos abordar la codificación desde una perspectiva Perspectiva de programación estructurada y orientada a objetos.

Enfoque estructural: En la programación estructurada, crearemos dos funciones:

  1. uno para retirar
  2. Y el otro por acción de depósito.

Dado que el funcionamiento de estas funciones sigue siendo el mismo en todas las cuentas.

Herencia en POO

El enfoque de la programación orientada a objetos: Durante el uso de la UPS enfoque de programación. Crearíamos dos clases.

  • Cada uno tiene implementación de las funciones de depósito y retiro.
  • Esto supondrá trabajo extra redundante.

Herencia en POO

Solicitud de cambio en software

Ahora hay un cambio en la especificación de requisitos para algo que es tan común en la industria del software. Se supone que debe agregar la funcionalidad de cuenta bancaria privilegiada con servicio de sobregiro. A modo de ejemplo, el sobregiro es un servicio en el que puede retirar una cantidad superior al saldo disponible en su cuenta.

Solicitud de cambio en software

Enfoque estructural: Utilizando un enfoque funcional, tengo que modificar mi función de retiro, que ya está probada y basada en la base. Y agregar un método como el siguiente se encargará de los nuevos requisitos.

Solicitud de cambio en software

El enfoque de la programación orientada a objetos: Usando el enfoque de programación orientada a objetos, solo necesita escribir una nueva clase con una implementación única de la función de retiro. Nunca tocamos el fragmento de código probado.

Solicitud de cambio en software

Otra solicitud de cambio

¿Qué pasa si el requisito cambia aún más? Le gusta agregar una cuenta de tarjeta de crédito con su propio requisito único de depósitos.

Solicitud de cambio múltiple en el requisito de software

Enfoque estructural: Utilizando un enfoque estructural, debe volver a cambiar el código de depósito probado.

Enfoque estructural para solicitudes de cambios múltiples en software

El enfoque de la programación orientada a objetos: Sin embargo, al usar un enfoque orientado a objetos, simplemente crearás una nueva clase con su propia implementación del método deposit (resaltado en rojo en la imagen inferior). Por lo tanto, aunque la programación estructurada parezca un enfoque sencillo al principio, la POO resulta más ventajosa a largo plazo.

El enfoque de la programación orientada a objetos para solicitudes de cambios múltiples

Ventajas de la herencia en OOP

Pero se puede argumentar que en todas las clases, hay fragmentos de código repetidos.

Para superar esto, crea una clase padre, digamos "cuenta", e implementa la misma función de depósito y retiro. Y haz que las clases hijas hereden la clase "cuenta". De esta manera, tendrán acceso a las funciones de retiro y depósito en la clase cuenta. No es necesario que las funciones se implementen individualmente. Esto es Herencia en java. .

Ventajas de la herencia en OOP

Ventajas de la herencia en OOP

Preguntas Frecuentes

Java evita la herencia múltiple de clases para prevenir el “problema del diamante”, donde el compilador no puede decidir qué método heredado usar. En cambio, Java Permite que una clase implemente múltiples interfaces para lograr una flexibilidad similar de forma segura.

La palabra clave `this` se refiere al objeto actual y sus miembros, mientras que `super` se refiere a la clase padre inmediata. Utilice `super` para llamar a las variables, métodos o constructor de una clase padre desde una subclase.

La herencia modela una relación de tipo "es un", donde una subclase hereda de una clase padre. La composición modela una relación de tipo "tiene un", donde una clase contiene otros objetos. La composición suele ser más flexible y se prefiere para diseños con bajo acoplamiento.

La IA puede analizar las responsabilidades de las clases, sugerir clases base compartidas, recomendar interfaces sobre herencia profunda y marcar código duplicado, ayudar aping Los desarrolladores crean jerarquías limpias y reutilizables que siguen los principios del diseño orientado a objetos.

Sí. El análisis estático asistido por IA puede medir la profundidad de la herencia, detectar jerarquías frágiles o excesivamente anidadas y sugerir refactorizaciones hacia la composición o las interfaces para mejorar la mantenibilidad y reducir el acoplamiento estrecho.

Resumir este post con: