En este tutorial, aprenderemos sobre la herencia de Java y sus tipos con la ayuda de example.
La herencia es una de las características clave de OOP que nos permite crear una nueva clase a partir de una clase existente.
La nueva clase que se crea se conoce como subclase (clase secundaria o derivada) y la clase existente de donde se deriva la clase secundaria se conoce como superclase (clase principal o base).
La extends
palabra clave se utiliza para realizar la herencia en Java. Por ejemplo,
class Animal ( // methods and fields ) // use of extends keyword // to perform inheritance class Dog extends Animal ( // methods and fields of Animal // methods and fields of Dog )
En el ejemplo anterior, la clase Dog se crea heredando los métodos y campos de la clase Animal.
Aquí, Perro es la subclase y Animal es la superclase.
Ejemplo 1: herencia de Java
class Animal ( // field and method of the parent class String name; public void eat() ( System.out.println("I can eat"); ) ) // inherit from Animal class Dog extends Animal ( // new method in subclass public void display() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access field of superclass labrador.name = "Rohu"; labrador.display(); // call method of superclass // using object of subclass labrador.eat(); ) )
Salida
Mi nombre es Rohu, puedo comer
En el ejemplo anterior, hemos derivado una subclase Perro de la superclase Animal. Note las declaraciones,
labrador.name = "Rohu"; labrador.eat();
Aquí, el labrador es un objeto de perro. Sin embargo, nombre y eat()
son los miembros de la clase Animal.
Dado que Dog hereda el campo y el método de Animal, podemos acceder al campo y al método utilizando el objeto Dog.

es una relación
En Java, la herencia es una relación es-una . Es decir, usamos la herencia solo si existe una relación es-a entre dos clases. Por ejemplo,
- El coche es un vehículo
- La naranja es una fruta
- El cirujano es un doctor
- El perro es un animal
En este caso, Car puede heredar de Vehicle , Orange puede heredar de Fruit , etc.
Anulación de métodos en la herencia de Java
En el Ejemplo 1 , vemos que el objeto de la subclase puede acceder al método de la superclase.
Sin embargo, si el mismo método está presente tanto en la superclase como en la subclase, ¿qué pasará?
En este caso, el método de la subclase anula el método de la superclase. Este concepto se conoce como anulación de método en Java.
Ejemplo 2: anulación de método en herencia de Java
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
Salida
Como comida para perros puedo ladrar
En el ejemplo anterior, el eat()
método está presente tanto en la superclase Animal como en la subclase Perro.
Aquí, hemos creado un objeto labrador de Perro.
Ahora, cuando llamamos eat()
usando el objeto labrador, se llama al método dentro de Dog. Esto se debe a que el método dentro de la clase derivada anula el método dentro de la clase base.
A esto se le llama anulación de método. Para obtener más información, visite Anulación del método Java.
Nota : hemos utilizado la @Override
anotación para decirle al compilador que estamos anulando un método. Sin embargo, la anotación no es obligatoria. Para obtener más información, visite Anotaciones de Java.
super palabra clave en herencia de Java
Anteriormente vimos que el mismo método en la subclase anula el método en la superclase.
En tal situación, la super
palabra clave se usa para llamar al método de la clase principal desde el método de la clase secundaria.
Ejemplo 3: super palabra clave en herencia
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( // call method of superclass super.eat(); System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
Salida
Puedo comer, como comida para perros, puedo ladrar
En el ejemplo anterior, el eat()
método está presente tanto en la clase base Animal como en la clase derivada Perro. Note la declaración,
super.eat();
Aquí, la super
palabra clave se usa para llamar al eat()
método presente en la superclase.
También podemos usar la super
palabra clave para llamar al constructor de la superclase desde el constructor de la subclase. Para obtener más información, visite la palabra clave super Java .
miembros protegidos en herencia
En Java, si una clase incluye protected
campos y métodos, estos campos y métodos son accesibles desde la subclase de la clase.
Example 4: protected Members in Inheritance
class Animal ( protected String name; protected void display() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void getInfo() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access protected field and method // using the object of subclass labrador.name = "Rocky"; labrador.display(); labrador.getInfo(); ) )
Output
I am an animal. My name is Rocky
In the above example, we have created a class named Animal. The class includes a protected field: name and a method: display()
.
We have inherited the Dog class inherits Animal. Notice the statement,
labrador.name = "Rocky"; labrador.display();
Here, we are able to access the protected field and method of the superclass using the labrador object of the subclass.
Why use inheritance?
- The most important use of inheritance in Java is code reusability. The code that is present in the parent class can be directly used by the child class.
- Method overriding is also known as runtime polymorphism. Hence, we can achieve Polymorphism in Java with the help of inheritance.
Types of inheritance
There are five types of inheritance.
1. Single Inheritance
En herencia única, una sola subclase se extiende a partir de una sola superclase. Por ejemplo,

2. Herencia multinivel
En la herencia multinivel, una subclase se extiende desde una superclase y luego la misma subclase actúa como superclase para otra clase. Por ejemplo,

3. Herencia jerárquica
En la herencia jerárquica, múltiples subclases se extienden desde una sola superclase. Por ejemplo,

4. Herencia múltiple
En la herencia múltiple, una sola subclase se extiende a partir de múltiples superclases. Por ejemplo,

Nota : Java no admite herencia múltiple. Sin embargo, podemos lograr una herencia múltiple usando interfaces. Para obtener más información, visite Java implementa la herencia múltiple.
5. Herencia híbrida
La herencia híbrida es una combinación de dos o más tipos de herencia. Por ejemplo,

Aquí, hemos combinado herencia jerárquica y múltiple para formar una herencia híbrida.