Java és un llenguatge de programació orientat a objectes que permet als desenvolupadors crear sistemes de programari complexos. Una de les característiques clau de Java és l'herència, que permet a les classes heretar propietats i mètodes d'altres classes. A Java, una classe només pot estendre una classe pare a la vegada, però és possible aconseguir un comportament semblant a l'herència múltiple mitjançant interfícies. En aquest article, explorarem com estendre diverses classes a Java i proporcionarem programes d'exemple amb sortida.
Ampliació de diverses classes a Java
Java no permet que una classe estengui diverses classes directament. El motiu d'això és evitar el problema del diamant, que es produeix quan una classe hereta de dues classes que tenen una superclasse comuna. Per evitar aquest problema, Java permet que una classe implementi múltiples interfícies, que poden aconseguir una funcionalitat similar.
Una interfície és una col·lecció de mètodes abstractes que defineixen el comportament d'una classe. A diferència de les classes, les interfícies no es poden instanciar, però les classes les poden implementar. En implementar una interfície, una classe pot heretar propietats i mètodes de múltiples interfícies. Permet que una classe assoleixi un comportament semblant a l'herència múltiple, sense el problema del diamant. Per estendre diverses classes a Java, hem de crear una interfície que contingui les propietats i els mètodes de les classes pare. La classe implementadora pot implementar la interfície i heretar les propietats i mètodes de les classes pares. Vegem un exemple per entendre millor aquest concepte.
q4 mesos
Ampliació de diverses classes a Java
En aquest exemple, crearem tres classes: Animal, Mamífer i Rèptil. Aleshores crearem una interfície anomenada Omnívor, que ampliarà les classes d'Animals i Mamífers. Finalment, crearem una classe anomenada Platypus, que implementarà la interfície Omnivore.
La classe Animal contindrà un mètode anomenat 'menjar' que imprimeix 'Animal està menjant'. La classe Mammal ampliarà la classe Animal i conté un mètode anomenat 'drinkMilk' que imprimeix 'El mamífer està bevent llet'. La classe Rèptil també ampliarà la classe Animal i conté un mètode anomenat 'layEggs' que imprimeix 'Rèptil està ponent ous'.
Aquí teniu el codi de la classe Animal:
public class Animal { public void eat() { System.out.println('Animal is eating.'); } }
Aquí teniu el codi de la classe Mammal:
public class Mammal extends Animal { public void drinkMilk() { System.out.println('Mammal is drinking milk.'); } }
Aquí teniu el codi de la classe Reptile:
travessa en ordre
public class Reptile extends Animal { public void layEggs() { System.out.println('Reptile is laying eggs.'); } }
Ara creem la interfície Omnivore, que ampliarà les classes Animal i Mammal:
public interface Omnivore extends Animal, Mammal { public void eatPlants(); }
Finalment, creem la classe Platypus, que implementarà la interfície Omnivore:
public class Platypus implements Omnivore { public void eat() { System.out.println('Platypus is eating.'); } public void drinkMilk() { System.out.println('Platypus is drinking milk.'); } public void eatPlants() { System.out.println('Platypus is eating plants.'); } }
En aquest exemple, la classe Platypus està implementant la interfície Omnivore, que amplia les classes Animal i Mammal. Per tant, la classe Platypus està heretant les propietats i els mètodes de les classes Animal i Mamífer.
Provem el nostre programa creant una instància de la classe Platypus i cridant als seus mètodes:
llista ordenar per java
public class Main { public static void main(String[] args) { Platypus p = new Platypus(); p.eat(); p.drinkMilk(); p.eatPlants(); } }
Sortida:
Platypus is eating. Platypus is drinking milk. Platypus is eating plants.
Com podem veure, la classe Platypus és capaç d'heretar les propietats i els mètodes de les classes Animal i Mamífer mitjançant la implementació de la interfície Omnivore. Això ens permet aconseguir un comportament semblant a l'herència múltiple a Java.
Quan utilitzar un comportament semblant a l'herència múltiple a Java
Tot i que és possible aconseguir un comportament semblant a l'herència múltiple a Java mitjançant interfícies, no sempre és necessari ni desitjable. De fet, molts desenvolupadors argumenten que l'herència múltiple pot fer que el codi sigui més complex i difícil de mantenir. Per tant, és important considerar acuradament si un comportament similar a l'herència múltiple és necessari per al vostre programa.
Una situació en què un comportament semblant a l'herència múltiple pot ser útil és quan necessiteu combinar funcionalitats de diverses fonts. Per exemple, si teniu dues classes que proporcionen diferents tipus de funcionalitats, és possible que vulgueu combinar-les en una sola classe que hereta d'ambdues. En aquest cas, implementar una interfície que ampliï ambdues classes pot ser una bona solució. Una altra situació en què un comportament semblant a l'herència múltiple pot ser útil és quan esteu treballant amb biblioteques de tercers que utilitzen l'herència àmpliament. Si necessiteu ampliar diverses classes de tercers, la implementació d'interfícies pot ser una bona manera d'aconseguir-ho sense crear jerarquies d'herència complexes.
A Java, no és possible ampliar directament diverses classes. Tanmateix, és possible aconseguir un comportament semblant a l'herència múltiple mitjançant la implementació d'interfícies que amplien diverses classes. Això permet que una classe hereti propietats i mètodes de diverses classes pares, sense el problema del diamant que pot sorgir amb l'herència múltiple directa. Tot i que un comportament semblant a l'herència múltiple pot ser útil en determinades situacions, és important considerar acuradament si és necessari per al vostre programa. En molts casos, utilitzar interfícies i composició pot ser una millor solució per combinar funcionalitats de múltiples fonts.