У Java 5, є функція, яка повертає коваріантний тип. До Java5, ми не могли змінювати тип повертання перевизначеного методу. Це означає, що якщо ви перевизначите метод в підкласі, то необхідно зворотне приведення його до типу підкласу.
Коваріантний тип повернення в Java, дозволяє звузити тип повертання перевизначеного методу. Ця функція допоможе уникнути кастингу на стороні клієнта. Це дозволяє програмісту запрограмувати без необхідності перевірки типу. Коваріантний тип повертається завжди, працює тільки для непримітивних типів повернення.
В системі типів мови програмування, є конструктори таких типів:
В системі типів мови програмування, є конструктори таких типів:
- коваріантні — якщо конструктор зберігає порядок типів (від похідних до базового);
- контраваріантні — якщо конструктор змінює порядок типів на протилежний;
- біваріантні — якщо прямий і обернений порядок є справедливими одночасно.
- інваріантні чи неваріантні — якщо конструктор не підпадає під попередні варіанти.
Наприклад, якщо типи Cat та Dog наслідують тип Animal, конструктором масивів з типу Animal утворимо тип Animal[] ("масив звірів"). Ми можемо використовувати його:
- коваріантно: вважаючи що Cat[] є представником Animal[]
- контраваріантно: вважаючи що Animal[] є представником Cat[]
- інваріантно: вважаючи що Animal[] не є представником Cat[] а також Cat[] не є представником Animal[].
Розглянемо сценарій, де у нас є два типи: виробник мобільних телефонів і пральна машина. На підставі вимог замовника, якщо користувач хоче купити мобільний телефон метод перевизначення поверне об'єкт мобільний телефон. Тут метод Get Тип продукту поверне мобільний - об'єкт телефон замість цільового продукту (мобільний телефон реалізує інтерфейс продукту). Тобто повертає об'єкт підкласу замість суперкласу. Точно так -метод клон в Mobile Phone класу поверне об'єкт Мобільний телефон замість об'єкта класу Object. Те ж саме правило відноситься і до пральної машини класу.
2. Covariant Returns.