Назад к вопросам
Middle
71
questionbank

Что такое наследование и полиморфизм в контексте ссылочных типов данных?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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.