众所周知,Java中方法重写的要求是方法签名完全相同。
方法签名是指 方法名+参数列表 。
而父类中或接口中的方法的时候重写方法的时候,除了方法签名完全相同之外,访问修饰符和返回值类型有什么限制吗?
答案是肯定的。
访问修饰符的开放范围由大到小排序是 public > protected > default > private
private类型是子类无法继承下来的, 所以父类中private修饰的方法并不能被子类重写。
废话不多说,接下来进入重点。
经过笔者的多次测试,发现访问修饰符和返回值类型虽然不必与父类中的方法相同,但也不是完全没有限制。
方法重写时:
子类中方法的访问修饰符必须 >= 父类中对应方法的访问修饰符 (访问修饰符大小关系已在本文中列出)
子类中方法的返回值类型可以和被重写方法的返回值类型相同,或者是被重写方法类型的子类型。
即 子类中方法的返回值类型必须 <= 父类中对应方法的返回值类型
以上结论对于抽象方法的实现同样适用。
因为在JDK1.7及以前的版本中,接口中所有的方法都默认是public类型的。所以说接口中的方法被重写时,其子类重写方法的访问修饰符必须是public.
由于笔者水平有限,还请大家多多批评指正。