Sobes.tech
Middle

İstinad növündə verilənlərdə irsiyyət və çox formallıq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Mirasçılıq, yeni sinfinin (alt sinf, törəm sinf) mövcud sinfinin (ata sinfi, super sinf) sahələrini və metodlarını miras ala bilməsinə imkan verən mexanizmdir. Bu, kodun təkrar istifadəsini və siniflərin iyerarxiyasını təşviq edir.

Polimorfizm (şəkil müxtəlifliyi) obyektin bir neçə formaya sahib ola bilmə qabiliyyətidir. Referans tipləri kontekstində, bu, super sinif dəyişəninin alt sinif obyektinə istinad edə bilməsi deməkdir. Bu, müxtəlif alt sinif obyektlərinin ümumi interfeys və ya super sinif vasitəsilə vahid şəkildə işlənməsinə imkan verir.

İki əsas polimorfizm növü mövcuddur:

  1. Təhlil vaxtı (statik polimorfizm): adətən metodların yüklənməsi (method overloading) vasitəsilə əldə edilir, bir sinifdə eyni adda, lakin fərqli imzalar (parametrlərin sayı və ya tipləri) olan bir neçə metod mövcuddur.
  2. İcranın vaxtı (dinamik polimorfizm): metodların üst-üstə qoyulması (method overriding) vasitəsilə əldə edilir, alt sinif artıq super sinifdə müəyyən edilmiş metodun öz tətbiqini təqdim edir. Bu metod super sinifə istinad vasitəsilə çağırıldıqda, alt sinifin tətbiqi icra olunur (əgər obyekt tipi alt sinifdirsə).

Miras və dinamik polimorfizm nümunəsi:

// Əsas sinif
class Animal {
    public void makeSound() {
        System.out.println("Ümumi heyvan səsi");
    }
}

// Alt sinif
class Dog extends Animal {
    @Override // Metodun üst-üstə qoyulması
    public void makeSound() {
        System.out.println("Hav!");
    }
}

// Alt sinif
class Cat extends Animal {
    @Override // Metodun üst-üstə qoyulması
    public void makeSound() {
        System.out.println("Miy!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Statik tip Animal, dinamik tip Dog obyekti
        Animal myDog = new Dog();
        // Statik tip Animal, dinamik tip Cat obyekti
        Animal myCat = new Cat();
        // Statik tip Animal, dinamik tip Animal obyekti
        Animal genericAnimal = new Animal();

        // Polimorfizmin nümayişi
        myDog.makeSound(); // Dog metodunu çağırır
        myCat.makeSound(); // Cat metodunu çağırır
        genericAnimal.makeSound(); // Animal metodunu çağırır
    }
}

Bu nümunədə, DogCat Animal-dən irs alır. myDog, myCatgenericAnimal dəyişənləri statik olaraq Animal tipindədir, lakin müxtəlif dinamik tiplərə (Dog, Cat, Animal) istinad edir. makeSound() metodunu çağırdıqda, hər bir istinad obyektin dinamik tipinə uyğun metod tətbiqini icra edir ki, bu da vaxtında polimorfizmdir.