Sobes.tech
Junior

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

sobes.tech AI

Отговор от AI

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

Полиморфизмът е способността на обекти от различни класове да реагират по различен начин на едно и също съобщение (методно извикване), в зависимост от техния конкретен тип. В контекста на наследяването това често се проявява чрез презаписване на методи на базовия клас в производния клас.

Пример (Java):

// Базов клас
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("Мяу!");
    }
}

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

        myDog.makeSound(); // Извиква метода на Dog
        myCat.makeSound(); // Извиква метода на Cat
    }
}

В този пример:

  • Наследяване: Класовете Dog и Cat наследяват от Animal.
  • Полиморфизъм: Променливите myDog и myCat се отнасят към обекти Dog и Cat съответно, въпреки че имат тип Animal. При извикване на makeSound() се изпълнява методът на обекта, а не на типа на препратката.