Java SE5中添加了协变返回类型,它表示在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型:
package com.zzj.tj8.covariant;
public class Covariant {
public static void main(String[] args) {
Service service = new Service();
Response response = service.progress();
System.out.println(response.getResponse());
service = new LoginService();
response = service.progress();
System.out.println(response.getResponse());
}
}
class Response {
public String getResponse() {
return "Response";
}
}
class SuccessResponse extends Response {
@Override
public String getResponse() {
return "SuccessResponse";
}
}
class Service {
public Response progress() {
return new Response();
}
}
class LoginService extends Service {
@Override
public SuccessResponse progress() {
return new SuccessResponse();
}
}
运行输出:
Response
SuccessResponse
Java SE5与Java较早版本之间的主要差异就是较早的版本强制progress()的覆盖版本必须返回Response,而不能返回SuccessResponse,尽管SuccessResponse是从Response导出的。协变返回类型允许返回更具体的SuccessResponse类型。