Ответ
Полиморфизм в Java реализуется через наследование и переопределение методов. Помимо интерфейсов, для этого используются:
-
Абстрактные классы (
abstract class):- Могут содержать как абстрактные методы (без реализации, обязательные к переопределению), так и конкретные методы с реализацией.
- Позволяют частично реализовать общую логику для группы классов.
abstract class Shape { // Абстрактный метод - полиморфный контракт abstract double calculateArea(); // Конкретный метод - общая логика void printInfo() { System.out.println("Area: " + calculateArea()); // Полиморфный вызов } } class Circle extends Shape { private double radius; @Override double calculateArea() { return Math.PI * radius * radius; } // Своя реализация } -
Обычные (конкретные) классы:
- Полиморфизм достигается за счёт переопределения (
@Override) методов родительского класса. - Позволяет модифицировать или расширять поведение унаследованных методов.
class Transport { void move() { System.out.println("Transport is moving"); } } class Airplane extends Transport { @Override void move() { System.out.println("Airplane is flying"); // Специфичная реализация } } - Полиморфизм достигается за счёт переопределения (
| Сравнение подходов: | Критерий | Интерфейс (Java 8+) | Абстрактный класс | Обычный класс |
|---|---|---|---|---|
| Наследование | Множественное | Одиночное | Одиночное | |
| Реализация по умолчанию | default-методы |
Конкретные и абстрактные методы | Только конкретные методы | |
| Состояние (поля) | Только static final (константы) |
Любые поля | Любые поля | |
| Конструкторы | Нет | Есть | Есть | |
| Когда использовать | Определение контракта, слабая связность | Частичная общая реализация, близкая связь классов | Полная реализация, которую нужно модифицировать |