Middle
Kuidas rakendada Java-s mitmekordset pärandamist?
sobes.tech AI
Vastus AI-lt
Java klasside mitmekordne pärimine otse ei toetata "rombiprobleemi" tõttu. Kuid selle funktsionaalsust saab saavutada järgmiste viisidega:
-
Liidesed: Klass võib rakendada mitmeid liideseid. Liidesed määratlevad ainult meetodite signatuurid, mitte nende rakendamist.
interface InterfaceA { void methodA(); } interface InterfaceB { void methodB(); } class MyClass implements InterfaceA, InterfaceB { @Override public void methodA() { // meetodiA rakendus } @Override public void methodB() { // meetodiB rakendus } }Java 8-s, kui ilmusid vaikimisi meetodid, saavad liidesed pakkuda ka vaikimisi rakendusi.
interface InterfaceC { default void defaultMethod() { System.out.println("Vaikimisi rakendus"); } } class MyClass2 implements InterfaceC { // saab kasutada defaultMethod või üle kirjutada } -
Koostis: Selle asemel, et pärida mitmest klassist, võib klass sisaldada teiste klasside eksemplare (liikmeid).
class ComponentA { void methodA() { // meetodiA rakendus } } class ComponentB { void methodB() { // meetodiB rakendus } } class MyClass3 { private ComponentA compA = new ComponentA(); private ComponentB compB = new ComponentB(); public void delegateMethodA() { compA.methodA(); } public void delegateMethodB() { compB.methodB(); } }Klass
MyClass3delegeerib meetodite väljakutsed objektidelecompAjacompB.
Võrdlus:
| Mehanism | Realiseerimise pärimine | Rombiprobleem | Paindlikkus |
|---|---|---|---|
| Liidesed | Ei (enne defaulti) | Ei | Kõrge |
| Koostis | Jah | Ei | Kõrge |