რა არის მემკვიდრეობა და პოლიმორფიზმი მიმთითებელი ტიპების მონაცემებში?
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() მეთოდის გამოძახებისას, თითოეულ შემთხვევაში, შესრულდება შესაბამისი რეალიზაცია ობიექტის დინამიკურ ტიპზე დამოკიდებული, რაც არის დროის პოლიმორფიზმი.