📜  Java covariant返回类型

📅  最后修改于: 2020-09-23 09:16:36             🧑  作者: Mango

协变返回类型

协变量返回类型指定返回类型可以在与子类相同的方向上变化。

在Java5之前,无法通过更改返回类型来覆盖任何方法。但是现在,从Java5开始,如果子类覆盖了返回类型为Non-Primitive的任何方法,但是它将其返回类型更改为子类类型,则可以通过更改返回类型来覆盖方法。让我们举一个简单的例子:

注意:如果您是Java的初学者,请跳过本主题,并在OOPs概念之后返回。

协变量返回类型的简单示例

class A{  
A get(){return this;}  
}  
  class B1 extends A{  
B1 get(){return this;}  
void message(){System.out.println("welcome to covariant return type");}  
  public static void main(String args[]){  
new B1().get().message();  
}  
}  

如上例所示,A类的get()方法的返回类型为A,但B类的get()方法的返回类型为B。这两种方法的返回类型均不同,但被方法覆盖。这称为协变返回类型。

协变返回类型如何实现?

Java不允许基于返回类型的重载,但JVM始终允许基于返回类型的重载。JVM使用方法的完整签名进行查找/解析。完全签名意味着它除了参数类型外还包括返回类型。即,一个类可以具有两个或多个方法,只是返回类型不同。javac使用此事实来实现协变返回类型。