Ի՞նչ է ժառանգությունը և պոլիմորֆիզմը հղումային տվյալների տիպերում։
sobes.tech AI
Պատասխան AI-ից
Ներառումը — դա մեխանիզմ է, որը թույլ է տալիս նոր դասին (ներդիր, ենթադաս, ենթակլաս) ժառանգել առարկաների և մեթոդների առկա դասից (հայրական դաս, սուպերկլաս): Սա խթանում է կոդի կրկնակի օգտագործումը և դասերի հիերարխիան:
Պոլիմորֆիզմը (բազմատիպություն) — դա օբյեկտի ունակությունն է ունենալ մի քանի ձևեր: Հղման տիպերի համատեքստում դա նշանակում է, որ սուպերկլասի փոփոխականը կարող է հղում կատարել ենթադասի օբյեկտին: Սա թույլ է տալիս միևնույն կերպ մշակել տարբեր ենթադասերի օբյեկտները՝ ընդհանուր ինտերֆեյսի կամ սուպերկլասի միջոցով:
Կան երկու հիմնական տեսակի պոլիմորֆիզմներ:
- Կոմպիլյացիայի ժամանակ (ստատիկ պոլիմորֆիզմ): Հասնում է մեթոդների բեռնման միջոցով (method overloading), երբ մի դասում կան մի քանի նույնանուն մեթոդներ, բայց տարբեր սիգնատուրաներով (պարամետրերի քանակով և/կամ տիպերով):
- Աշխատանքի ժամանակ (դինամիկ պոլիմորֆիզմ): Հասնում է մեթոդների վերագրումով (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() մեթոդը, կատարվում է համապատասխան իրականացումը՝ կախված օբյեկտի դինամիկ տիպից, ինչը և հանդիսանում է ժամանակի պոլիմորֆիզմ։