方法重写细节
1.子类的方法重写的返回值类型,参数,名字必须与父类的被重写方法一致(子类重写方法可以自己额外加上final,synchronized关键字,因为这不会造成覆盖失败),这里子类重写方法的返回值类型可以是父类被重写方法的返回值类型的子类,但不能是父类被重写方法的返回值类型的父类。方法重写发生的范围是子类与子类全部的上级类。
2.子类的方法重写不能缩小父类方法的访问权限范围
这里说的访问权限范围是指能被访问的范围,即public > protected > default > private
比如父类的方法如下
public void a(){ System.out.println("BBB"); };
那么子类重写的方法只能是pubilc访问权限
再比如以下的父类中的方法
protected void a(){};//子类的方法重写只能是大于protected的访问权限 void a(){};//子类的方法重写只能是大于default的访问权限 private void a(){};//子类的方法重写可以四个权限任意一种,因为private已经是最小了
之所以要设置这一条规则,我觉得是因为子类重写方法如果比父类的小,那么遇到父类的访问权限允许,子类访问权限不允许的情况,会向父类的作用域去调用相应的方法,就覆盖不了父类了,那你设置这个方法override等于没用。
3.重载与重写做个对比
4.注意,属性不能重写,父类的属性全部会存在子类对象内存空间中