Herencia de Java (con ejemplos)

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

Implementación de herencia de Java

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 @Overrideanotació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 superpalabra 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 superpalabra clave se usa para llamar al eat()método presente en la superclase.

También podemos usar la superpalabra 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 protectedcampos 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,

Herencia única de Java

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,

Herencia multinivel de Java

3. Herencia jerárquica

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

Herencia jerárquica de Java

4. Herencia múltiple

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

Herencia múltiple de Java

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,

Herencia híbrida de Java

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

Articulos interesantes...