7. Что такое полиморфизм? Пример
UNKNOWNПолиморфизм — это один из основных принципов объектно-ориентированного программирования (ООП), который позволяет объектам разных классов быть обработанными через один и тот же интерфейс. В Java полиморфизм достигается за счет методов переопределения (overriding) и перегрузки (overloading).
Полиморфизм через методы переопределения
Когда подкласс предоставляет конкретную реализацию метода, который уже определен в его суперклассе, это называется переопределением метода. Полиморфизм позволяет использовать объекты суперкласса, не зная точный тип объекта в момент выполнения программы.
Пример полиморфизма
Рассмотрим тот же пример с классами животных:
// Базовый класс
public class Animal {
// Метод, который может быть переопределен
public void makeSound() {
System.out.println("Animal makes a sound");
}
}
// Подкласс Dog
public class Dog extends Animal {
// Переопределение метода makeSound
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
// Подкласс Cat
public class Cat extends Animal {
// Переопределение метода makeSound
@Override
public void makeSound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
// Создаем массив животных
Animal[] animals = {new Dog(), new Cat()};
// Проходим по массиву и вызываем makeSound() для каждого животного
for (Animal animal : animals) {
animal.makeSound();
}
}
}
В этом примере:
- У нас есть базовый класс
Animalс методомmakeSound(). - Подклассы
DogиCatпереопределяют методmakeSound()с конкретными реализациями. - В методе
mainмы создаем массив объектов типаAnimal, но фактически это объекты классовDogиCat. - Когда мы вызываем метод
makeSound()для каждого объекта в массиве, вызывается соответствующая переопределенная версия метода, в зависимости от фактического типа объекта.
Полиморфизм через методы перегрузки
Перегрузка методов позволяет создавать несколько методов с одним и тем же именем, но с различными параметрами. Хотя это тоже форма полиморфизма, она отличается от переопределения, так как происходит на этапе компиляции.
public class MathUtils {
// Перегруженный метод для сложения двух целых чисел
public int add(int a, int b) {
return a + b;
}
// Перегруженный метод для сложения трех целых чисел
public int add(int a, int b, int c) {
return a + b + c;
}
// Перегруженный метод для сложения двух чисел с плавающей точкой
public double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
MathUtils math = new MathUtils();
// Вызовет метод add(int, int)
System.out.println(math.add(1, 2));
// Вызовет метод add(int, int, int)
System.out.println(math.add(1, 2, 3));
// Вызовет метод add(double, double)
System.out.println(math.add(1.5, 2.5));
}
}
В этом примере:
- У нас есть класс
MathUtilsс перегруженными методамиadd. - Каждый метод имеет одно и то же имя, но различается количеством и типом параметров.
- В методе
mainмы вызываем разные версии методаadd, в зависимости от переданных аргументов.
Преимущества полиморфизма
- Гибкость и расширяемость: Полиморфизм позволяет легко расширять и изменять программу без изменения существующего кода.
- Упрощение кода: Использование общего интерфейса для различных классов упрощает написание и чтение кода.
- Динамическое поведение: Полиморфизм позволяет объектам вести себя по-разному в зависимости от их конкретного типа во время выполнения программы.
Таким образом, полиморфизм является мощным инструментом, который делает код более гибким, модульным и легко поддерживаемым, что является важным аспектом объектно-ориентированного программирования.
Предыдущий вопрос: 6. Что такое наследование? Пример
Следующий вопрос: 8. Что такое ассоциация, агрегация и композиция?
Все вопросы по теме:список
Все темы:список
Вопросы/замечания/предложения/нашли ошибку:напишите мне