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, бирок алар ар башка динамикалык тибтердин объекттерине шилтеме жасайт. makeSound() методун чакырганда, ар бир шилтеме үчүн, объекттин динамикалык тибине жараша, методдун реализациясы ишке ашырылат, бул — убакыттагы полиморфизм.