Назад к вопросам
Junior
96
questionbank

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

Sobes Copilot

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

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

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