Что такое наследование и полиморфизм в контексте ссылочных типов данных?
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.