logo

Java Extend Multiple Classs

Java je objektovo orientovaný programovací jazyk, ktorý umožňuje vývojárom vytvárať komplexné softvérové ​​systémy. Jednou z kľúčových vlastností Java je dedičnosť, ktorá umožňuje triedam dediť vlastnosti a metódy z iných tried. V jazyku Java môže trieda rozšíriť naraz iba jednu rodičovskú triedu, ale pomocou rozhraní je možné dosiahnuť viacnásobné správanie podobné dedičnosti. V tomto článku preskúmame, ako rozšíriť viacero tried v jazyku Java a poskytneme príklady programov s výstupom.

Rozšírenie viacerých tried v jazyku Java

Java neumožňuje triede priamo rozšíriť viacero tried. Dôvodom je vyhnúť sa diamantovému problému, ktorý nastáva, keď trieda dedí z dvoch tried, ktoré majú spoločnú supertriedu. Aby sa predišlo tomuto problému, Java umožňuje triede implementovať viacero rozhraní, ktoré môžu dosiahnuť podobnú funkčnosť.

Rozhranie je zbierka abstraktných metód, ktoré definujú správanie triedy. Na rozdiel od tried, rozhrania nemôžu byť inštanciované, ale môžu byť implementované triedami. Implementáciou rozhrania môže trieda zdediť vlastnosti a metódy z viacerých rozhraní. Umožňuje triede dosiahnuť viacnásobné správanie podobné dedičnosti bez diamantového problému. Na rozšírenie viacerých tried v Jave musíme vytvoriť rozhranie, ktoré obsahuje vlastnosti a metódy rodičovských tried. Implementačná trieda potom môže implementovať rozhranie a zdediť vlastnosti a metódy rodičovských tried. Poďme sa pozrieť na príklad, aby sme lepšie pochopili tento pojem.

ako funguje počítač

Rozšírenie viacerých tried v jazyku Java

V tomto príklade vytvoríme tri triedy: Zviera, Cicavec a Plaz. Následne vytvoríme rozhranie s názvom Omnivore, ktoré rozšíri triedy Animal a Mammal. Nakoniec vytvoríme triedu s názvom Platypus, ktorá bude implementovať rozhranie Omnivore.

Trieda Animal bude obsahovať metódu nazvanú 'jesť', ktorá vypíše 'Zviera žerie.' Trieda Cicavce rozšíri triedu Zvieratá a bude obsahovať metódu nazvanú „drinkMilk“, ktorá vytlačí „Cicavec pije mlieko“. Trieda Plaz rozšíri aj triedu Zvieratá a bude obsahovať metódu nazvanú 'layEggs', ktorá vypíše 'Reptile kladie vajíčka'.

Tu je kód pre triedu zvierat:

 public class Animal { public void eat() { System.out.println('Animal is eating.'); } } 

Tu je kód pre triedu cicavcov:

 public class Mammal extends Animal { public void drinkMilk() { System.out.println('Mammal is drinking milk.'); } } 

Tu je kód pre triedu plazov:

 public class Reptile extends Animal { public void layEggs() { System.out.println('Reptile is laying eggs.'); } } 

Teraz vytvoríme rozhranie Omnivore, ktoré rozšíri triedy zvierat a cicavcov:

skúste chytiť v jave
 public interface Omnivore extends Animal, Mammal { public void eatPlants(); } 

Nakoniec vytvoríme triedu Platypus, ktorá bude implementovať rozhranie 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.'); } } 

V tomto príklade trieda Platypus implementuje rozhranie Omnivore, ktoré rozširuje triedy zvierat a cicavcov. Preto trieda Platypus dedí vlastnosti a metódy tried zvierat aj cicavcov.

Otestujme náš program vytvorením inštancie triedy Platypus a volaním jej metód:

 public class Main { public static void main(String[] args) { Platypus p = new Platypus(); p.eat(); p.drinkMilk(); p.eatPlants(); } } 

Výkon:

 Platypus is eating. Platypus is drinking milk. Platypus is eating plants. 

Ako môžeme vidieť, trieda Platypus je schopná zdediť vlastnosti a metódy tried Animal aj Mammal implementáciou rozhrania Omnivore. To nám umožňuje dosiahnuť v Jave viacnásobné správanie podobné dedičnosti.

hiba bukhari

Kedy použiť správanie podobné viacnásobnej dedičnosti v jazyku Java

Aj keď je možné v jazyku Java dosiahnuť viacnásobné správanie podobné dedičnosti pomocou rozhraní, nie je to vždy potrebné alebo žiaduce. V skutočnosti mnohí vývojári tvrdia, že viacnásobné dedenie môže urobiť kód zložitejším a náročnejším na údržbu. Preto je dôležité starostlivo zvážiť, či je pre váš program nevyhnutné správanie podobné viacnásobnému dedičstvu.

Jedna situácia, v ktorej môže byť užitočné správanie podobné viacnásobnému dedeniu, je situácia, keď potrebujete skombinovať funkcie z viacerých zdrojov. Napríklad, ak máte dve triedy, ktoré poskytujú rôzne typy funkčnosti, možno ich budete chcieť skombinovať do jednej triedy, ktorá bude dediť z oboch. V tomto prípade môže byť dobrým riešením implementácia rozhrania, ktoré rozširuje obe triedy. Ďalšou situáciou, v ktorej môže byť užitočné správanie podobné viacnásobnému dedeniu, je situácia, keď pracujete s knižnicami tretích strán, ktoré vo veľkej miere využívajú dedičnosť. Ak potrebujete rozšíriť viacero tried tretích strán, implementácia rozhraní môže byť dobrým spôsobom, ako to dosiahnuť bez vytvárania zložitých hierarchií dedičnosti.

V Jave nie je možné priamo rozšíriť viacero tried. Je však možné dosiahnuť viacnásobné správanie podobné dedičnosti implementáciou rozhraní, ktoré rozširujú viaceré triedy. To umožňuje triede dediť vlastnosti a metódy z viacerých rodičovských tried bez diamantového problému, ktorý môže vzniknúť pri priamom viacnásobnom dedení. Zatiaľ čo správanie podobné viacnásobnému dedeniu môže byť v určitých situáciách užitočné, je dôležité dôkladne zvážiť, či je to potrebné pre váš program. V mnohých prípadoch môže byť použitie rozhraní a kompozície lepším riešením pre kombináciu funkcií z viacerých zdrojov.