Sobes.tech
Middle

Ի՞նչ մեխանիզմներ կան Java-ում պոլիմորֆիզմի իրականացման համար։

sobes.tech AI

Պատասխան AI-ից

  • Կոմպիլյացիայի ժամանակի բազմակողմանիություն (ստատիկ բազմակողմանիություն): Իրականացվում է մեթոդների ավելորդ բեռնման (method overloading) միջոցով: Մեթոդները ունեն նույն անունը, բայց տարբեր ստորագրություններ (մեկական, տիպային կամ կարգի մեջ փոփոխություններ):

    class Calculator {
        // add մեթոդի ավելորդ բեռնում
        public int add(int a, int b) {
            return a + b;
        }
    
        public double add(double a, double b) {
            return a + b;
        }
    }
    
  • Կատարման ժամանակի բազմակողմանիություն (դինամիկ բազմակողմանիություն): Իրականացվում է մեթոդների վերագրումով (method overriding): Տարածածկ դասի մեթոդը նույն ստորագրությունն ունի, ինչ վերին դասի մեթոդը և ներկայացնում է իր սեփական իրականացմանը: Որ մեթոդը կանչել, որոշվում է գործարկման ժամանակ՝ կախված օբյեկտի իրական տիպից:

    class Animal {
        public void sound() {
            System.out.println("Կենդանին ձայն է հանում");
        }
    }
    
    class Dog extends Animal {
        // sound մեթոդի վերագրում
        @Override
        public void sound() {
            System.out.println("Շունը հաչում է");
        }
    }
    
    class Cat extends Animal {
        // sound մեթոդի վերագրում
        @Override
        public void sound() {
            System.out.println("Մկնիկը մյուում է");
        }
    }
    
  • Հղումներ վերին դասի / ինտերֆեյսի: Տարածածկ դասերի օբյեկտները կարող են վերագրել վերին դասերի կամ ինտերֆեյսների հղումներին, որոնք նրանք իրականացնում են: Սա թույլ է տալիս միատարր կերպով մշակել տարբեր տիպերի օբյեկտներ ընդհանուր հղումով: Այդպիսի հղումից վերագրած վերագրած մեթոդի կանչը հանգեցնում է իրական օբյեկտի տիպի տարբերակին:

    Animal myAnimal = new Dog(); // Dog օբյեկտի վերագրում Animal տիպի հղում
    myAnimal.sound(); // Կոչվում է Dog դասի վերագրած sound() մեթոդը