Java для автоматизаторов
  • Introduction
  • Java. Введение
    • Java как язык и платформа
    • Установка и настройка
  • Язык Java. Основы
    • Hello World
    • Переменные
    • Типы данных
    • Строки
    • Циклы "while" / "do ... while"
    • Циклы "for"
    • Условный оператор "if / if ... else"
    • Условный оператор "switch"
    • Массивы
    • Задания к главе
  • ООП в Java
    • Классы и объекты
    • Методы
    • Свойства
    • Параметры методов
    • Ключевое слово this
    • Конструктор
    • Модификаторы static и final
    • StringBuffer
    • Метод toString()
    • Метод equals()
    • Наследование
    • Пакеты
    • Интерфейсы
    • Модификаторы Public, Private и Protected
    • Полиморфизм
    • Инкапсуляция
    • Использование обобщений
    • Generics and Wildcards
    • Анонимные классы
    • Исключения
    • Множественные исключения
    • Абстрактные классы
    • Вложенные классы
    • Тип Enum
    • Задания к главе
  • Коллекции
    • ArrayList
    • Linked Lists
    • HashMap
    • Sets (Множества)
    • Sorted Maps
    • Задание порядка в множестве ( natural ordering )
    • Очередь (Queue)
    • Использование итераторов
    • Создание объектов, реализующих интерфейс Iterable
    • Задания к главе
  • Стиль написания кода
    • Структура файла
    • Файлы-исходники
    • Открывающие комментарии
    • Сведения о пакете и импорте
    • Объявление классов и интерфейсов
    • Длина строки
    • Переносы строк
    • Переносы в объявлении методов
    • Переносы в операторе if
    • Переносы в тернарных операциях
    • Виды комментариев
    • Блочные комментарии
    • Однострочные комментарии
    • Комментарии в конце строки
    • Объявления (Декларации)
    • Операторы
    • Пропуски
    • Конвенция именования
    • Задания к главе
  • Работа с файлами
    • Работа с текстовыми файлами
    • Работа с XML файлами
    • Работа с JSON файлами
    • Property-файлы
    • Задания к главе
  • Log4j - система логирования сообщений в Java
    • Начало работы
    • Конфигурационные файлы
    • Стандартные аппендеры
    • Задания к главе
  • Юнит тестирование
    • JUnit vs TestNG. Основные аннотации
    • JUnit vs TestNG. Примеры тестов
      • Exception тесты
      • Ignore тесты
      • Тест с таймаутом
      • Тест сьюты
      • Параметризованные тесты
      • Зависимые тесты
      • Многопоточность
    • Asserts
    • Использование "заглушек" (Mocks)
  • Build инструменты
    • Build инструменты
    • Примеры конфигураций
  • Системы контроля версий. Git
    • Системы контроля версий. Git
    • Git. Установка
    • Git. Основы
    • Git. Основные команды
      • Настройка
      • Работа с репозиторием
      • Работа с удаленным сервером
      • Работа с ветками
Powered by GitBook
On this page
  1. ООП в Java

Полиморфизм

Рассмотрим ещё одного из китов объектно-ориентированного программирования – полиморфизм. Что это такое, и как его применять на практике.

Давайте разберем, что же такое полиморфизм, на примере принтера и документов, которые на нем печатаются. В данной идеологии у нас есть единый интерфейс – принтер, который выводит содержимое документа на бумагу. Ему не важно, какой документ отправлен на печать – изображение, таблица или текст. Все, что ему нужно сделать, это вызвать общий метод – печать данного интерфейса, и позволить этому методу выполнить его специализированные функции. Причем реализация этих специализированных функций у каждого документа своя.

В двух словах полиморфизм – это различная реализация однотипных действий через единый интерфейс, при условии, что данный интерфейс наследуется всеми видами реализации.

В программировании полиморфизм используется для того, чтобы сделать приложения более модульными и расширяемыми. Вместо беспорядочных условных предложений, описывающих различные направления действия, вы создаете взаимозаменяемые объекты, которые подбираете согласно своим нуждам. Это основная задача полиморфизма.

Приведу наглядный пример. Все садовые деревья плодоносят, независимо от сорта дерева. Отсюда вытекает, что единым интерфейсом является объект «дерево» с методом «созревание плодов». А вот как, и каким способом созревает плод, является индивидуальной реализацией каждого сорта отдельно. Перенесем выше сказанное на программный язык.

Создадим класс GardenTree, в котором реализуем только один метод «maturation»:

package my.polimorfism;

public class GardenTree {
    public void maturation() {
        System.out.println("Parent class: maturation.");
    }
}

Далее создадим два класса наследующих класс GardenTree, и переопределяющих метод maturation родительского класса:

package my.polimorfism;

public class Apple extends GardenTree {
    public void maturation() {
        System.out.println("Maturation apple.");
    }
}

package my.polimorfism;

public class Cherry extends GardenTree {
    public void maturation() {
        System.out.println("Maturation cherry.");
    }
}

Ну и собственно создаем класс, в котором реализуется идеология полиморфизма:

package my.polimorfism;

public class App {
    public static void ripening_fruit(GardenTree i) {
        i.maturation();
    }

    public static void main( String[] args ) {
        GardenTree apple = new Apple();
        GardenTree cherry = new Cherry();

        ripening_fruit(apple);
        ripening_fruit(cherry);
    }
}

Вопрос 1

Назовите преимущества такого подхода.
PreviousМодификаторы Public, Private и ProtectedNextИнкапсуляция

Last updated 6 years ago