前几天写代码的时候,遇到了向上造型后,调用重写方法的返回值问题,就仔细查阅了一下资料。
在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();
所以,证明在向上造型的情况下,即使调用的是重写方法,但是返回值类型还是父类方法的返回值类型。
个人理解,如有错误,欢迎指正!谢谢!