方法的重载:
方法重载的定义:同一个类或与他的派生类中,方法名相同,而参数列表不同的方法。其中参数列表不同指的是参数的类型,数量,类型的顺序这三种至少有一种不同。
方法重载与下列无关:
与返回值类型无关;与访问修饰符无关
构造方法也可以重载
方法的重写:
方法的重写的定义:在继承关系的子类中,定义一个与父类相同的方法
判断是否重写的方式:在方法之前加上@ Overri de
方法重写的特点:
在继承关系的子类中重写父类的方法
重写的方法必须方法名相同,参数列表也相同
重写的方法的返回值类型应该与父类中被重写方法的返回值类型相同或是他的子类类型
重写的方法的访问权限应该与父类中被重写方法的访问权限相同或高于它的访问权限
重写的方法不能抛出比父类更加宽泛的异常
方法重写的注意事项:
构造方法不能被重写,不要问为什么?因为构造方法名必须和类名相同
private修饰的成员方法不能被重写
static修饰的方法不能被重写
final修饰的方法不能被重写
当子类重写了父类中的方法后,子类对象调用该方法时调用的是子类重写后的方法
为何Java中子类重写方法的访问权限不能低于父类中权限
因为 向上转型及java程序设计维护的原因
例:
假设一个父类A 拥有的方法 public void setXXX(){} 可以被其他任意对象调用
这个方法被子类B 覆写后 为 void setXXX(){} 即 默认的 访问权限 只能被本包极其子类 所访问
假设 其他包中的对象 C 调用 方法为:
get( A a){
a.setXXX();
}
而此时传入的对象为B类对象,假设为b此时b将转型为a但是b中的setXXX() 调用权限
已经被缩小了这将造成错误。所以子类对象不能比父类对象访问权限大
如下图为可被访问的范围示意图,
如此编写方法时,以父类作为参数,实现时传入子类便不会因可被访问的范围出现错误
以上只是一个例子还有其他出于易维护、易代码结构设计的设计思想原因
其他:子类中重写的方法抛出的异常应该为父类中方法的子异常或相同异常,并且抛出的异常种类不能多于父类中的方法。