Contenido del Curso
Java POO
Java POO
Principios de POO: Herencia
Herencia
Analicemos el principio de la POO: la Herencia.
Herencia es un mecanismo que permite la creación de clases basadas en otra clase.
La clase que sirve como base se denomina padre o superclase;
La clase creada a partir de la clase padre se denomina hija, subclase o descendiente.
De este modo, la clase hija puede heredar las características y propiedades de otra clase: la clase padre (sus métodos y variables).
Se puede heredar una clase utilizando la palabra clave extends
. La sintaxis para que una clase hija herede de una clase padre es la siguiente:
Child.java
class Child extends Parent { // properties and methods }
Veamos un ejemplo de cómo funciona la herencia en el código. Tenemos una clase Bird
con ciertos campos y métodos, y existe una clase Parrot
con sus propios campos y métodos. Un loro es un pájaro, por lo tanto, lógicamente, el loro debe heredar de la clase Bird
:
Aquí tienes el código de la captura de pantalla, reescrito para mejorar la legibilidad y claridad:
Bird.java
Parrot.java
Main.java
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }
Analicemos lo que sucede en estas imágenes:
Se crea una clase
Bird
, que en este caso es la clase padre. Esta clase tiene sus propios campos y métodos;Se crea una clase
Parrot
, que utiliza la palabra claveextends
para heredar de la clase padreBird
. La claseParrot
es una clase hija y tiene sus propios campos y métodos. Además, como clase hija,Parrot
hereda todos los campos y métodos de la clase padreBird
;Se crea un objeto de la clase
Parrot
en el métodomain
y se observa que es posible inicializar los campos de ambas clases, tanto la padre como la hija. Primero, se inicializan los campos de la clase padreBird
y luego los campos de la clase hijaParrot
. A continuación, se llaman los métodos: primero los de la clase padre y luego el método de la clase hija.
De este modo, se utilizó la herencia para heredar la clase Bird
.
¿Por qué hacemos esto?
Cuando existen muchas subclases diferentes de Bird
, no solo Parrot
, por ejemplo, también Pigeon
y Penguin
, habrá muchos campos duplicados, como boolean canFly
. Lo primero que ayuda la herencia es a evitar fragmentos de código duplicados.
Además, mejora significativamente la legibilidad. En la práctica, rara vez se trabaja directamente con la clase Bird
y sus subclases, pero la herencia se utiliza comúnmente, especialmente con interfaces.
Nota
Aprenderás sobre interfaces en la siguiente sección de este curso.
Reglas de la herencia
Heredar solo una clase. Java no admite la herencia múltiple. Una clase solo puede tener un padre;
Todo se hereda excepto las variables y métodos
private
.
Nota
¡No puedes heredar de ti mismo!
Anteriormente, se mencionó que una subclase tendría acceso a todas las variables y métodos de la clase padre. Sin embargo, eso no es completamente cierto.
En realidad, todos los métodos y variables marcados con el modificador private
no son accesibles para la subclase.
Sobrescribir el método de la clase padre.
Supongamos que se hereda una clase, pero hay ciertas partes del código heredado que no resultan convenientes. Por ejemplo, se desea que un método específico funcione de manera diferente que en la clase padre.
Para sobrescribir un método de la clase padre, se escribe @Override
encima de él:
Parrot.java
@Override public void eat() { System.out.println("The parrot is eating"); }
En el código anterior, hemos sobrescrito el método de la clase padre, y ahora, cuando este método se llama desde la clase hija, ¡se invocará el método sobrescrito!
Prevención de la herencia.
Si no desea que nadie herede su clase, utilice el modificador final
antes de ella.
Por ejemplo:
Bird.java
Parrot.java
public final class Bird { // fields and methods }
De esta manera, al utilizar la palabra clave final
, hemos prohibido la herencia de la clase Bird
.
Estas son solo las reglas fundamentales y características de la herencia. Es un tema amplio, y lo utilizarás con mucha frecuencia. A lo largo del curso, te familiarizarás con otros aspectos de la herencia y los emplearás con mayor frecuencia.
1. ¿Por qué necesitamos la herencia en Java?
2. ¿De cuántas clases podemos heredar a la vez?
3. ¿Cómo podemos prevenir la herencia en Java?
¡Gracias por tus comentarios!