logo

Herència en Java

  1. Herència
  2. Tipus d'herència
  3. Per què no és possible l'herència múltiple a Java en cas de classe?

Herència en Java és un mecanisme en el qual un objecte adquireix totes les propietats i comportaments d'un objecte pare. És una part important de OOPs (Sistema de programació orientada a objectes).

La idea darrere de l'herència a Java és que podeu crear nous classes que es construeixen a partir de les classes existents. Quan hereteu d'una classe existent, podeu reutilitzar mètodes i camps de la classe pare. A més, també podeu afegir nous mètodes i camps a la vostra classe actual.

L'herència representa el Relació IS-A que també es coneix com a pare-fill relació.

Per què utilitzar l'herència a Java

Termes utilitzats en Herència

    Classe:Una classe és un grup d'objectes que tenen propietats comunes. És una plantilla o plànol a partir de la qual es creen objectes.Subclasse/classe infantil:La subclasse és una classe que hereta l'altra classe. També s'anomena classe derivada, classe estesa o classe secundària.Súper classe/classe de pares:La superclasse és la classe d'on una subclasse hereta les característiques. També s'anomena classe base o classe pare.Reutilitzabilitat:Com el seu nom indica, la reutilització és un mecanisme que us facilita la reutilització dels camps i mètodes de la classe existent quan creeu una nova classe. Podeu utilitzar els mateixos camps i mètodes ja definits a la classe anterior.

La sintaxi de l'herència de Java

 class Subclass-name extends Superclass-name { //methods and fields } 

El amplia la paraula clau indica que esteu creant una nova classe que deriva d'una classe existent. El significat de 'estén' és augmentar la funcionalitat.

creació de taules d'oracle

En la terminologia de Java, una classe que s'hereta s'anomena pare o superclasse, i la nova classe s'anomena fill o subclasse.


Exemple d'herència de Java

Herència en Java

Tal com es mostra a la figura anterior, el programador és la subclasse i l'empleat és la superclasse. La relació entre les dues classes és Empleat programador IS-A . Vol dir que el programador és un tipus d'empleat.

llop contra guineu
 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); } } 
Prova-ho ara
 Programmer salary is:40000.0 Bonus of programmer is:10000 

A l'exemple anterior, l'objecte Programador pot accedir al camp de la classe pròpia i de la classe Employee, és a dir, la reutilització del codi.


Tipus d'herència en java

En funció de la classe, hi pot haver tres tipus d'herència a Java: simple, multinivell i jeràrquica.

A la programació java, només s'admet l'herència múltiple i híbrida mitjançant la interfície. Més endavant coneixerem les interfícies.

Tipus d'herència a Java

Nota: L'herència múltiple no s'admet a Java mitjançant classe.

Quan una classe hereta diverses classes, es coneix com a herència múltiple. Per exemple:

Herència múltiple en Java

Exemple d'herència única

Quan una classe hereta una altra classe, es coneix com a herència única . A l'exemple que es mostra a continuació, la classe Dog hereta la classe Animal, de manera que hi ha l'herència única.

Fitxer: 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(); }} 

Sortida:

 barking... eating... 

Exemple d'herència multinivell

Quan hi ha una cadena d'herència, es coneix com herència multinivell . Com podeu veure a l'exemple que es mostra a continuació, la classe BabyDog hereta la classe Dog que torna a heretar la classe Animal, de manera que hi ha una herència multinivell.

com convertir una cadena a enter en java

Fitxer: 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(); }} 

Sortida:

 weeping... barking... eating... 

Exemple d'herència jeràrquica

Quan dues o més classes hereten una sola classe, es coneix com a herència jeràrquica . En l'exemple que es mostra a continuació, les classes de gos i gats hereten la classe Animal, de manera que hi ha una herència jeràrquica.

Fitxer: 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 }} 

Sortida:

 meowing... eating... 

P) Per què no s'admet l'herència múltiple a Java?

Per reduir la complexitat i simplificar el llenguatge, java no admet l'herència múltiple.

què és un sistema de fitxers Linux

Considereu un escenari on A, B i C són tres classes. La classe C hereta les classes A i B. Si les classes A i B tenen el mateix mètode i l'anomeneu des de l'objecte de classe fill, hi haurà ambigüitat per cridar el mètode de la classe A o B.

Com que els errors en temps de compilació són millors que els errors en temps d'execució, Java mostra errors en temps de compilació si hereteu 2 classes. Així, si teniu el mateix mètode o diferent, hi haurà un error de temps de compilació.

 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? } } 
Prova-ho ara
 Compile Time Error