Herencia en Java Es un mecanismo en el que un objeto adquiere todas las propiedades y comportamientos de un objeto padre. Es una parte importante de Ups (Sistema de programación Orientado a Objetos).
La idea detrás de la herencia en Java es que puedes crear nuevos clases que se basan en clases existentes. Cuando heredas de una clase existente, puedes reutilizar métodos y campos de la clase principal. Además, también puedes agregar nuevos métodos y campos en tu clase actual.
La herencia representa la relación ES-A que también se conoce como padre-hijo relación.
¿Por qué utilizar la herencia en Java?
- Para Anulación de métodos (entonces polimorfismo en tiempo de ejecución puede lograrse).
- Para la reutilización del código.
Términos utilizados en herencia
La sintaxis de la herencia de Java.
class Subclass-name extends Superclass-name { //methods and fields }
El extiende la palabra clave indica que está creando una nueva clase que se deriva de una clase existente. El significado de 'extiende' es aumentar la funcionalidad.
En la terminología de Java, una clase heredada se llama padre o superclase, y la nueva clase se llama hija o subclase.
Ejemplo de herencia de Java
Como se muestra en la figura anterior, Programador es la subclase y Empleado es la superclase. La relación entre las dos clases es Programador IS-A Empleado . Significa que el Programador es un tipo de Empleado.
class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } }Pruébalo ahora
Programmer salary is:40000.0 Bonus of programmer is:10000
En el ejemplo anterior, el objeto Programador puede acceder al campo de su propia clase así como al de la clase Empleado, es decir, la reutilización del código.
Tipos de herencia en java
Según la clase, puede haber tres tipos de herencia en Java: única, multinivel y jerárquica.
En la programación Java, la herencia múltiple e híbrida se admite únicamente a través de la interfaz. Aprenderemos sobre las interfaces más adelante.
Nota: La herencia múltiple no se admite en Java a través de clases.
Cuando una clase hereda varias clases, se conoce como herencia múltiple. Por ejemplo:
Ejemplo de herencia única
Cuando una clase hereda otra clase, se conoce como herencia única . En el ejemplo que se muestra a continuación, la clase Perro hereda la clase Animal, por lo que existe una herencia única.
cadena java a int
Archivo: TestInheritance.java
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }}
Producción:
barking... eating...
Ejemplo de herencia multinivel
Cuando existe una cadena de herencia, se conoce como herencia multinivel . Como puede ver en el ejemplo siguiente, la clase BabyDog hereda la clase Perro, que a su vez hereda la clase Animal, por lo que existe una herencia multinivel.
Archivo: TestInheritance2.java
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }}
Producción:
weeping... barking... eating...
Ejemplo de herencia jerárquica
Cuando dos o más clases heredan una sola clase, se conoce como herencia jerárquica . En el ejemplo que se muestra a continuación, las clases Perro y Gato heredan la clase Animal, por lo que existe una herencia jerárquica.
Archivo: TestInheritance3.java
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }}
Producción:
meowing... eating...
P) ¿Por qué Java no admite la herencia múltiple?
Para reducir la complejidad y simplificar el lenguaje, Java no admite la herencia múltiple.
Considere un escenario donde A, B y C son tres clases. La clase C hereda las clases A y B. Si las clases A y B tienen el mismo método y lo llama desde un objeto de clase secundaria, habrá ambigüedad al llamar al método de la clase A o B.
Dado que los errores en tiempo de compilación son mejores que los errores en tiempo de ejecución, Java genera errores en tiempo de compilación si hereda 2 clases. Entonces, ya sea que tenga el mismo método o uno diferente, habrá un error en el tiempo de compilación.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }Pruébalo ahora
Compile Time Error