向上造型后,关于调用重写后方法的返回值

前几天写代码的时候,遇到了向上造型后,调用重写方法的返回值问题,就仔细查阅了一下资料。

在java5之前,重写方法的返回值类型只能与父类方法的返回值类型一致,但在java5的时候因为协变返回类型的存在,重写的方法的返回类型可以是原方法返回类型的子类(即我们通常说的重写方法的返回值类型要小于或等于父类)。但是当我们向上造型后调用重写的方法,还是应该用原方法的返回值类型去接收返回值。


例如:

Workbook 是一个接口,HSSFWorkbook是Workbook的实现类

Workbook中有一个方法Sheet createSheet(String sheetname),返回值类型是Sheet

HSSFWorkbook中实现类的方法为public HSSFSheet createSheet(String sheetname) {     ......      },返回值为HSSFSheet

其中Sheet是一个接口,HSSFSheet是Sheet的一个实现类

当我们向上造型:Workbook wb = new HSSFWorkbook();    

调用wb.createSheet()方法时

Sheet sheet=wb.createSheet()       //正确

HSSFSheet sheet1=wb.createSheet()//错误,会提示我们改为HSSFSheet sheet1=(HSSFSheet)wb.createSheet();

所以,证明在向上造型的情况下,即使调用的是重写方法,但是返回值类型还是父类方法的返回值类型。



个人理解,如有错误,欢迎指正!谢谢!



猜你喜欢

转载自blog.csdn.net/qq_39986274/article/details/79047380