Перейти к содержимому

10 примеров полиморфизма JAVA

  • автор:

Полиморфизм — один из ключевых принципов объектно-ориентированного программирования (ООП) в Java. Он позволяет объектам разных типов обрабатываться через единый интерфейс, а вызов метода определяется во время выполнения (динамический полиморфизм) или компиляции (статический полиморфизм, т.е. перегрузка методов).

Ниже приведены 10 примеров полиморфизма в Java, охватывающих как переопределение (overriding), так и перегрузку (overloading) методов:


1. Переопределение метода toString()

class Animal {
    @Override
    public String toString() {
        return "Это животное";
    }
}

class Dog extends Animal {
    @Override
    public String toString() {
        return "Это собака";
    }
}

// Использование:
Animal a = new Dog();
System.out.println(a); // Выведет: Это собака

2. Переопределение метода equals()

class Person {
    String name;
    Person(String name) { this.name = name; }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Person p) {
            return this.name.equals(p.name);
        }
        return false;
    }
}

3. Полиморфизм через интерфейс

interface Drawable {
    void draw();
}

class Circle implements Drawable {
    public void draw() { System.out.println("Рисуем круг"); }
}

class Rectangle implements Drawable {
    public void draw() { System.out.println("Рисуем прямоугольник"); }
}

// Использование:
Drawable d = new Circle();
d.draw(); // Рисуем круг

4. Полиморфизм через абстрактный класс

abstract class Shape {
    abstract double area();
}

class Square extends Shape {
    double side;
    Square(double side) { this.side = side; }
    double area() { return side * side; }
}

// Использование:
Shape s = new Square(5);
System.out.println(s.area()); // 25.0

5. Массив полиморфных объектов

Animal[] animals = { new Dog(), new Animal() };
for (Animal a : animals) {
    System.out.println(a); // Вызов toString() с учётом реального типа
}

6. Перегрузка методов (статический полиморфизм)

class Calculator {
    int add(int a, int b) { return a + b; }
    double add(double a, double b) { return a + b; }
    int add(int a, int b, int c) { return a + b + c; }
}

7. Полиморфизм при передаче параметров

void feed(Animal a) {
    System.out.println("Кормим: " + a);
}

feed(new Dog()); // Вызов с подклассом

8. Полиморфизм через обобщённые (generic) коллекции и интерфейсы

List<Drawable> shapes = new ArrayList<>();
shapes.add(new Circle());
shapes.add(new Rectangle());

for (Drawable d : shapes) {
    d.draw(); // Вызов метода конкретной реализации
}

9. Полиморфизм с использованием анонимных классов

Drawable triangle = new Drawable() {
    public void draw() {
        System.out.println("Рисуем треугольник");
    }
};

triangle.draw(); // Рисуем треугольник

10. Полиморфизм в обработке исключений

try {
    // ...
} catch (IOException e) {
    System.out.println("Ошибка ввода-вывода");
} catch (Exception e) {
    System.out.println("Общая ошибка");
}
// Здесь обрабатывается иерархия исключений — тоже форма полиморфизма

Кратко:

  • Динамический полиморфизм: через наследование и переопределение (@Override).
  • Статический полиморфизм: через перегрузку методов (overloading).

Все эти примеры демонстрируют, как Java позволяет писать гибкий и расширяемый код за счёт полиморфизма.

Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *