Sobes.tech
Middle

Какво е наследяване и полиморфизъм в контекста на референтните типове данни?

sobes.tech AI

Отговор от AI

Наследяването е механизъм, който позволява създаването на нов клас (потомък, дъщерен), който наследява полетата и методите на съществуващ клас (базов, родителски). Това насърчава повторната употреба на код и създаването на йерархии от класове.

Полиморфизмът е възможността обекти от различни класове да се държат по единен начин или да имат различно поведение при извикване на един и същи метод. Различават се два основни вида: статичен (претоварване на методи) и динамичен (презаписване на методи).

В контекста на референтните типове данни, наследяването позволява създаването на променлива от базовия клас, която може да се отнася към обект от производния клас. В този случай полиморфизмът се проявява в това, че при извикване на метод чрез такава променлива ще се изпълнява версията на метода от реалния тип на обекта, а не от типа на референцията (динамичен полиморфизъм).

Пример на Java:

// Базов клас
class Animal {
    public void makeSound() {
        System.out.println("Издава звук");
    }
}

// Производен клас 1
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Гав-гав");
    }
}

// Производен клас 2
class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Мяу-мяу");
    }
}

class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Променлива от тип Animal, която сочи към обект Dog
        Animal myCat = new Cat(); // Променлива от тип Animal, която сочи към обект Cat

        myDog.makeSound(); // Извиква метода от Dog (полиморфизъм)
        myCat.makeSound(); // Извиква метода от Cat (полиморфизъм)
    }
}

В този пример, myDog и myCat имат тип на референцията Animal, но благодарение на полиморфизма, при извикване на makeSound() се изпълнява съответната реализация от Dog и Cat.