Sobes.tech
Junior

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

sobes.tech AI

Отговор от AI

Наследяването е механизъм, който позволява на нов клас (подклас/дъщерен клас) да наследи свойства (полета) и поведение (методи) на съществуващ клас (горен клас/родителски клас), като разширява или презаписва функционалността. Това насърчава повторната употреба на кода и установява отношения "е" (is-a).

Полиморфизмът е възможността обекти от различни класове да реагират по различен начин на едно и също име на метод, в зависимост от конкретния им тип по време на изпълнение. Той осигурява гъвкавост и разширяемост на кода, позволявайки обработката на обекти от подкласове чрез препратка към горен клас.

В типовете данни с препратки (класове) тези концепции играят ключова роля:

  • Наследяване: Подкласът има достъп до членовете на горния клас и може да добавя свои или да променя поведението на наследените методи (презаписване - overriding). Обект от подклас може да бъде използван навсякъде, където се очаква обект от горния клас.
  • Полиморфизъм: Различни обекти, принадлежащи към една и съща йерархия на наследяване, могат да бъдат обработвани със същия код, като се извиква един и същ метод, но реализацията на този метод ще бъде специфична за конкретния тип обект по време на изпълнение.

Пример в Java:

// Горен клас (родителски клас)
class Animal {
    public void makeSound() {
        System.out.println("Издава звук");
    }
}

// Подклас (дъщерен клас), наследяващ от Animal
class Dog extends Animal {
    // Презаписва метода на горния клас
    @Override
    public void makeSound() {
        System.out.println("Га!");
    }
}

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

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

        myAnimal.makeSound(); // Ще изведе: Издава звук
        myDog.makeSound();    // Ще изведе: Га! (полиморфизъм - извикване на метода Dog)
        myCat.makeSound();    // Ще изведе: Мяу! (полиморфизъм - извикване на метода Cat)
    }
}