logo

Коваріантні типи повернення в Java

Коли вухо торкається барабанних перетинок, ми швидко дізнаємося, що це можна зробити через різні типи даних або аргументи, передані функції, про що програміст дізнався спочатку під час навчання поліморфізм в java.  До JDK 5.0 це було неможливо перевизначити метод шляхом зміни типу повернення. Коли ми перевизначаємо метод батьківського класу, типи аргументів імені та тип повернення методу перевизначення в дочірньому класі мають бути точно такими ж, як і в методі батьківського класу. Говорили, що основний метод незмінний щодо типу повернення. 

Починаючи з версії Java 5.0, можна мати різні типи повернення для основного методу в дочірньому класі, але дочірній тип має бути підтипом батьківського типу. Переважним методом стає варіант щодо типу повернення.
Коваріантний тип повернення заснований на Принцип підстановки Ліскова .

1 мільйон скільки 0

Тепер, фанати, ви, напевно, задаєтеся питанням, навіщо використовувати, для яких ми перерахуємо переваги таким чином:



  • Це допомагає уникнути плутанини з приведеннями типів, наявними в ієрархії класів, і таким чином робить код зручним для читання та обслуговування.
  • Ми маємо свободу мати більш конкретні типи повернення під час перевизначення методів.
  • Допомога в запобіганні ClassCastExceptions під час виконання під час повернення

Примітка: Якщо ми поміняємо типи повернення Base і Derived, вищезгадана програма не працюватиме. Будь ласка, подивіться це програма наприклад.

приклад Два класи, що використовуються для типів повернення

Java
// Java Program to Demonstrate Different Return Types // if Return Type in Overridden method is Sub-type // Class 1 class A { } // Class 2 class B extends A { } // Class 3 // Helper class (Base class) class Base {  // Method of this class of class1 return type  A fun()  {  // Display message only  System.out.println('Base fun()');  return new A();  } } // Class 4 // Helper class extending above class class Derived extends Base {  // Method of this class of class1 return type  B fun()  {  // Display message only  System.out.println('Derived fun()');  return new B();  } } // Class 5 // Main class public class GFG {  // Main driver method  public static void main(String args[])  {  // Creating object of class3 type  Base base = new Base();  // Calling method fun() over this object  // inside main() method  base.fun();  // Creating object of class4 type  Derived derived = new Derived();  // Again calling method fun() over this object  // inside main() method  derived.fun();  } } 

Вихід:  

Base fun() Derived fun()

Створіть вікторину