Sobes.tech
Middle
305

როგორ შეიძლება განახორციელოთ მრავალმხრივი მემკვიდრეობა Java-ში?

პასუხი AI-სგან

sobes.tech AI

Java-да դասի իրականացման բազմակի ժառանգությունը ուղղակիորեն չի աջակցվում «ռոմբի խնդիր»-ի պատճառով: Սակայն, դրա գործառույթը կարելի է հասնել հետևյալ եղանակներով:

  1. Ինտերֆեյսներ: Դասը կարող է իրականացնել մի քանի ինտերֆեյսներ: Ինտերֆեյսները միայն որոշում են մեթոդների սիգնատուրաները, ոչ թե նրանց իրականացմանը:

    interface InterfaceA {
        void methodA();
    }
    
    interface InterfaceB {
        void methodB();
    }
    
    class MyClass implements InterfaceA, InterfaceB {
        @Override
        public void methodA() {
            // methodA իրականացում
        }
    
        @Override
        public void methodB() {
            // methodB իրականացում
        }
    }
    

    Java 8-ով դեֆոլտ մեթոդների հայտնվելուց հետո, ինտերֆեյսները կարող են նաև տրամադրել ըստ նախնական իրականացումների:

    interface InterfaceC {
        default void defaultMethod() {
            System.out.println("Նախնական իրականացում");
        }
    }
    
    class MyClass2 implements InterfaceC {
        // defaultMethod օգտագործել կամ վերանվանել
    }
    
  2. Կոմպոզիցիա: Փոխարենը բազմաբաժան դասերից ժառանգելու, դասը կարող է պարունակել այլ դասերի օրինակներ (միավորներ):

    class ComponentA {
        void methodA() {
            // methodA իրականացում
        }
    }
    
    class ComponentB {
        void methodB() {
            // methodB իրականացում
        }
    }
    
    class MyClass3 {
        private ComponentA compA = new ComponentA();
        private ComponentB compB = new ComponentB();
    
        public void delegateMethodA() {
            compA.methodA();
        }
    
        public void delegateMethodB() {
            compB.methodB();
        }
    }
    

    MyClass3 դասը դելեգատոր է compA և compB օբյեկտների մեթոդների:

Համեմատություն:

մեխանիզմ Իրականացման ժառանգություն Ռոմբի խնդիր Գործառույթի ճկունություն
Ինտերֆեյսներ Չկա (դեֆոլտից առաջ) Չկա Բարձր
Կոմպոզիցիա Այո Չկա Բարձր