Java中的协变返回类型

时间:2020-01-09 10:35:18  来源:igfitidea点击:

据说Java中的方法重写相对于返回类型是协变的,这意味着允许返回类型在与子类相同的方向上变化。 Java 5中添加了Java中的协变返回类型功能。

什么是Java中的协变返回类型

首先,让我们尝试了解此协变返回类型的确切含义是什么?在Java 5之前,无法在子类中更改覆盖方法的返回类型,这意味着父类中的方法和子类中的覆盖方法应具有相同的名称,相同的编号和类型以及相同的参数。返回类型。
从Java 5开始,由于此协变量返回类型功能,被覆盖的方法可能具有与父类中的方法不同的返回类型。但是有一个限制,子类方法的返回类型必须是父类方法的返回类型的子类型。

例如,在父类中,有一个返回类型为R1的方法。在子类中,重写的方法可能具有不同的返回类型R2,但R2必须是R1的子类型。

Java协变量返回类型示例

class Parent{
	Parent getInstance(){
		return new Parent();
	}
	void parentTest(){
		System.out.println("In parent class method");
	}
}
class Child extends Parent{
	// return type is subtype here
	Child getInstance(){
		return new Child();
	}
	void childTest(){
		System.out.println("In child class method");
	}
}
public class CovariantDemo {

	public static void main(String[] args) {
		Parent pobj = new Parent();
		Child cobj = new Child();
		pobj.getInstance().parentTest();
		cobj.getInstance().childTest();
	}
}

输出:

In parent class method
In child class method