Herencia de Java
Herencia de Java
En este tutorial, aprenderemos sobre la herencia de Java y sus tipos con la ayuda de ejemplos.
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 padre o base).
El extends
La 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, el Perro La clase se crea heredando los métodos y campos del Animal clase.
Toma, 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
My name is Rohu I can eat
En el ejemplo anterior, hemos derivado una subclase Perro de la superclase Animal . Observe las declaraciones,
labrador.name = "Rohu";
labrador.eat();
Aquí, labrador es un objeto de Perro . Sin embargo, nombre y eat()
son los miembros del Animal clase.
Desde Perro hereda el campo y el método de Animal , podemos acceder al campo y al método usando el objeto del Dog .

es-una relación
En Java, la herencia es un is-a relación. Es decir, usamos la herencia solo si existe una relación es-un entre dos clases. Por ejemplo,
- Coche es un Vehículo
- Naranja es una fruta
- Cirujano es un médico
- Perro es un Animal
Aquí, Coche puede heredar de Vehículo , Naranja puede heredar de Fruit , y así sucesivamente.
Sustitución de métodos en la herencia de Java
En 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é sucederá?
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étodos en Java.
Ejemplo 2:anulación de métodos en la 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
I eat dog food I can bark
En el ejemplo anterior, el eat()
El método está presente tanto en la superclase Animal y la subclase Perro .
Aquí, hemos creado un objeto labrador de Perro .
Ahora cuando llamamos a eat()
usando el objeto labrador , el método dentro de Dog se llama. Esto se debe a que el método dentro de la clase derivada anula el método dentro de la clase base.
Esto se denomina anulación de métodos. Para obtener más información, visite Anulación de métodos de Java.
Nota :Hemos utilizado el @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.
palabra clave super en la herencia de Java
Previamente vimos que el mismo método en la subclase anula el método en la superclase.
En tal situación, el super
La palabra clave se utiliza para llamar al método de la clase principal desde el método de la clase secundaria.
Ejemplo 3:palabra clave super 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
I can eat I eat dog food I can bark
En el ejemplo anterior, el eat()
El método está presente tanto en la clase base Animal y la clase derivada Perro . Note la declaración,
super.eat();
Aquí, el super
palabra clave se utiliza para llamar al eat()
método presente en la superclase.
También podemos usar el 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 de Java.
Miembros protegidos en Herencia
En Java, si una clase incluye protected
campos y métodos, entonces estos campos y métodos son accesibles desde la subclase de la clase.
Ejemplo 4:miembros protegidos en herencia
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();
}
}
Salida
I am an animal. My name is Rocky
En el ejemplo anterior, hemos creado una clase llamada Animal. La clase incluye un campo protegido:nombre y un método:display()
.
Hemos heredado el Perro la clase hereda Animal . Note la declaración,
labrador.name = "Rocky";
labrador.display();
Aquí, podemos acceder al campo protegido y al método de la superclase usando labrador objeto de la subclase.
¿Por qué usar la herencia?
- El uso más importante de la herencia en Java es la reutilización del código. El código que está presente en la clase principal puede ser utilizado directamente por la clase secundaria.
- La anulación de métodos también se conoce como polimorfismo en tiempo de ejecución. Por lo tanto, podemos lograr polimorfismo en Java con la ayuda de la herencia.
Tipos de herencia
Hay cinco tipos de herencia.
1. Herencia única
En herencia simple, una sola subclase se extiende desde 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 una 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 herencia múltiple, una sola subclase se extiende desde múltiples superclases. Por ejemplo,

Nota :Java no admite la herencia múltiple. Sin embargo, podemos lograr 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.
Java