logo

Java の共変戻り値の型

耳が「オーバーライド」を鼓膜に当てると、プログラマーが学習中に最初に学んだことを、さまざまなデータ型または関数に渡される引数によって実行できることがすぐにわかります。 Javaのポリモーフィズム。  JDK 5.0 より前では、次のことはできませんでした。 オーバーライド 戻り値の型を変更してメソッドを作成します。親クラスのメソッドをオーバーライドする場合、子クラスのオーバーライドするメソッドの名前引数の型と戻り値の型は、親クラスのメソッドの名前とまったく同じである必要があります。オーバーライドメソッドは次のように言われました 不変 戻り値の型に関して。 

Java バージョン 5.0 以降では、子クラスのオーバーライド メソッドに異なる戻り値の型を持つことができますが、子の戻り値の型は親の戻り値の型のサブタイプである必要があります。オーバーライドメソッドは次のようになります 変異体 戻り値の型に関して。
共変の戻り値の型は、 リスコフ置換原理

マニアの皆さんは、なぜこれを使用するのか疑問に思っているはずです。その利点を以下にリストします。



  • これは、クラス階層に存在する混乱を招く型キャストを回避し、コードを読みやすく、使いやすく、保守しやすくするのに役立ちます。
  • メソッドをオーバーライドするときに、より具体的な戻り値の型を自由に取得できます。
  • リターン時のランタイム ClassCastException の防止に役立ちます

注記: Base と Derived の戻り値の型を交換すると、上記のプログラムは機能しなくなります。ご覧ください これ たとえばプログラム。

マイスペースとは何ですか

戻り値の型に使用される 2 つのクラス

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()

クイズの作成