Какво е наследяване и полиморфизъм в контекста на референтните типове данни?
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.