Sobes.tech
Middle

Ի՞նչ է ժառանգությունը և պոլիմորֆիզմը հղումային տվյալների տիպերում։

sobes.tech AI

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

Ներառումը — դա մեխանիզմ է, որը թույլ է տալիս նոր դասին (ներդիր, ենթադաս, ենթակլաս) ժառանգել առարկաների և մեթոդների առկա դասից (հայրական դաս, սուպերկլաս): Սա խթանում է կոդի կրկնակի օգտագործումը և դասերի հիերարխիան:

Պոլիմորֆիզմը (բազմատիպություն) — դա օբյեկտի ունակությունն է ունենալ մի քանի ձևեր: Հղման տիպերի համատեքստում դա նշանակում է, որ սուպերկլասի փոփոխականը կարող է հղում կատարել ենթադասի օբյեկտին: Սա թույլ է տալիս միևնույն կերպ մշակել տարբեր ենթադասերի օբյեկտները՝ ընդհանուր ինտերֆեյսի կամ սուպերկլասի միջոցով:

Կան երկու հիմնական տեսակի պոլիմորֆիզմներ:

  1. Կոմպիլյացիայի ժամանակ (ստատիկ պոլիմորֆիզմ): Հասնում է մեթոդների բեռնման միջոցով (method overloading), երբ մի դասում կան մի քանի նույնանուն մեթոդներ, բայց տարբեր սիգնատուրաներով (պարամետրերի քանակով և/կամ տիպերով):
  2. Աշխատանքի ժամանակ (դինամիկ պոլիմորֆիզմ): Հասնում է մեթոդների վերագրումով (method overriding), երբ ենթադասը տրամադրում է իր իրականացմանը արդեն սուպերկլասում սահմանված մեթոդը: Երբ այդ մեթոդը կանչվում է սուպերկլասի հղումով, կատարվում է ենթադասի իրականացումը (եթե օբյեկտի տիպը — ենթադաս):

Նմուշ՝ ժառանգություն և դինամիկ պոլիմորֆիզմ:

// Հիմնական դաս
class Animal {
    public void makeSound() {
        System.out.println("Ընդհանուր կենդանու ձայն");
    }
}

// Ներդիր դաս
class Dog extends Animal {
    @Override // Վերագրում մեթոդը
    public void makeSound() {
        System.out.println("Հաու!");
    }
}

// Ներդիր դաս
class Cat extends Animal {
    @Override // Վերագրում մեթոդը
    public void makeSound() {
        System.out.println("Մյաու!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Ստատիկ տիպ՝ Animal, դինամիկ տիպ՝ Dog
        Animal myDog = new Dog();
        // Ստատիկ տիպ՝ Animal, դինամիկ տիպ՝ Cat
        Animal myCat = new Cat();
        // Ստատիկ տիպ՝ Animal, դինամիկ տիպ՝ Animal
        Animal genericAnimal = new Animal();

        // Պոլիմորֆիզմի ցուցադրություն
        myDog.makeSound(); // Կոչում է Dog-ի մեթոդը
        myCat.makeSound(); // Կոչում է Cat-ի մեթոդը
        genericAnimal.makeSound(); // Կոչում է Animal-ի մեթոդը
    }
}

Այս օրինակով Dog և Cat ժառանգում են Animal-ից: Փոփոխականները myDog, myCat և genericAnimal ունեն ստատիկ տիպ Animal, բայց հղում են տարբեր դինամիկ տիպերի օբյեկտներին (Dog, Cat, Animal): Երբ կանչվում է makeSound() մեթոդը, կատարվում է համապատասխան իրականացումը՝ կախված օբյեկտի դինամիկ տիպից, ինչը և հանդիսանում է ժամանակի պոլիմորֆիզմ։