Sobes.tech
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:

  1. 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
    }
    
  2. 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 MyClass3 delegeerib meetodite väljakutsed objektidele compA ja compB.

Võrdlus:

Mehanism Realiseerimise pärimine Rombiprobleem Paindlikkus
Liidesed Ei (enne defaulti) Ei Kõrge
Koostis Jah Ei Kõrge