La herencia es uno de los conceptos fundamentales de la programación orientada a objetos (OOP) y Java es un lenguaje que incorpora completamente estos conceptos. La herencia permite que una clase adquiera propiedades y comportamientos de otra clase, promoviendo la reutilización de código y la creación de una jerarquía de clases. En Java, la sintaxis y los conceptos relacionados con la herencia son fundamentales para crear aplicaciones eficientes y bien estructuradas.

Concepto de Herencia

En Java, la herencia se utiliza para establecer una relación "es-a" entre clases. Si una clase B se deriva de una clase A, decimos que B es un tipo especializado de A. Por ejemplo, si tenemos una clase "Vehículo" y una clase "Coche", podemos decir que "Coche" es un " Vehículo", por lo tanto, "Coche" hereda de "Vehículo".

Esto significa que "Car" hereda todas las propiedades y métodos públicos y protegidos de la clase "Vehicle", a menos que "Car" los anule (un concepto conocido como anulación). Además, "Car" puede agregar sus propios métodos y propiedades específicos.

Sintaxis de herencia en Java

Para implementar la herencia en Java, utilizamos la palabra clave extends. A continuación se muestra un ejemplo sencillo de cómo se puede expresar la herencia:

clase Vehículo {
    // Propiedades y métodos de la clase Vehículo
}

clase Coche extiende Vehículo {
    // Propiedades y métodos adicionales de la clase Car
}

En el ejemplo anterior, "Coche" hereda de "Vehículo". Esto significa que "Car" tiene acceso a todos los métodos y propiedades de "Vehicle" (excepto los privados), y también puede tener sus propios métodos y propiedades.

Usando el constructor de superclases

Cuando una clase hereda de otra, el constructor de la superclase (la clase de la que hereda) no se hereda. Para llamar al constructor de la superclase, usamos la palabra clave super. Esto normalmente se hace en la primera línea del constructor de la subclase:

clase Vehículo {
    Vehículo() {
        // constructor de superclase
    }
}

clase Coche extiende Vehículo {
    Auto() {
        súper(); // Llama al constructor de la clase Vehículo.
        // Código adicional para el constructor de automóviles
    }
}

Usar super es esencial cuando la superclase no tiene un constructor predeterminado (sin parámetros) o cuando queremos llamar a un constructor específico de la superclase.

Anulación de método

En Java, una subclase puede anular los métodos de la superclase. Esto se hace declarando un método en la subclase con la misma firma que el método en la superclase. La anulación permite que la subclase proporcione una implementación específica de un método que ya existe en la superclase.

clase Vehículo {
    movimiento vacío() {
        System.out.println("El vehículo está en movimiento");
    }
}

clase Coche extiende Vehículo {
    @Override // Anotación opcional que indica la anulación del método
    movimiento vacío() {
        System.out.println("El coche se está moviendo");
    }
}

En el ejemplo anterior, el método move() de la clase "Car" anula el método move() de la clase "Vehicle". La anotación @Override es opcional, pero es una buena práctica usarla porque ayuda a identificar errores en tiempo de compilación si el método no corresponde correctamente a un método de la superclase.

Polimorfismo con herencia

La herencia y el polimorfismo van de la mano en Java. El polimorfismo es la capacidad de tratar objetos de diferentes subclases de la misma superclase como si fueran del mismo tipo. Esto permite escribir métodos de una manera más genérica, tratando con la superclase, pero funcionando correctamente con cualquier subclase.

Vehículo miVehículo = coche nuevo();
miVehículo.move(); // Llama al método move() de Car

En el ejemplo anterior, incluso si myVehicle es del tipo "Vehicle", el método move() que se llama es el de la clase "Car", porque el objeto real es una instancia de "Car".

Acceso a miembros de superclase

Cuando una subclase anula un miembro de la superclase, a veces es necesario acceder al miembro de la superclase. Esto se hace usando la palabra clave super.

clase Coche extiende Vehículo {
    @Anular
    movimiento vacío() {
        super.move(); // Llama al método move() de la superclase Vehículo
        // Código adicional específico para el automóvil
    }
}

En el ejemplo anterior, super.mover() se utiliza para llamar al método move() de la superclase "Vehicle" antes de ejecutar código adicional desde la superclase "Car "subclase".

Restricciones de herencia

Aunque la herencia es poderosa, existen algunas restricciones en Java:

  • Una clase sólo puede heredar de una única superclase (Java no admite herencia múltiple directamente).
  • Clases marcadas confinal no se puede heredar.
  • Los métodos marcados como final no se pueden sobrescribir.

Conclusión

La herencia es una piedra angular de la programación orientada a objetos y proporciona una manera poderosa de organizar y reutilizar el código. La sintaxis de la herencia en Java es sencilla, pero es importante comprender los detalles y las mejores prácticas para utilizar la herencia de forma eficaz. Al crear una jerarquía de clases con herencia, podemos crear aplicaciones más modulares y más fáciles de mantener.

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 Sintaxis básica de Java: polimorfismo

Siguiente página del libro electrónico gratuito:

15Sintaxis básica de Java: polimorfismo

5 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.