logo

Java의 공변 반환 유형

귀가 고막을 '무시'함에 따라 우리는 프로그래머가 학습하는 동안 처음에 배운 다양한 데이터 유형이나 함수에 전달된 인수 덕분에 이것이 수행될 수 있다는 것을 빨리 알게 됩니다. 자바의 다형성.  JDK 5.0 이전에는 불가능했습니다. 보수 반환 유형을 변경하는 방법. 부모 클래스 메서드를 재정의할 때 자식 클래스에 있는 재정의 메서드의 이름 인수 형식과 반환 형식은 부모 클래스 메서드의 것과 정확히 동일해야 합니다. 최우선적인 방법은 다음과 같다고 합니다. 불변 반환 유형과 관련하여. 

Java 버전 5.0 이상에서는 자식 클래스의 재정의 메서드에 대해 다른 반환 유형을 가질 수 있지만 자식의 반환 유형은 부모 반환 유형의 하위 유형이어야 합니다. 재정의 방법은 다음과 같습니다. 변종 반환 유형과 관련하여.
공변량 반환 유형은 다음을 기반으로 합니다. Liskov 대체 원리 .

이제 괴짜 여러분은 왜 사용해야 하는지 궁금하실 것입니다. 다음과 같이 장점을 나열하겠습니다.



  • 이는 클래스 계층 구조에 존재하는 혼란스러운 유형 캐스트를 피하고 코드를 읽기 쉽고 사용 가능하고 유지 관리 가능하게 만드는 데 도움이 됩니다.
  • 메서드를 재정의할 때 더 구체적인 반환 유형을 자유롭게 가질 수 있습니다.
  • 반품 시 런타임 ClassCastException을 방지하는 데 도움이 됩니다.

메모: 반환 유형을 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()

퀴즈 만들기