📅  最后修改于: 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使用此事实来实现协变返回类型。