重载:
在同一个类中,拥有类似功能的同名方法之间的关系叫做重载。
重载的条件:1、具有相同方法名和类似功能;
2、参数的类型或者个数不同;
3、与返回值无关;
重写:
在子父类的继承关系中,子类继承父类以后,可以对父类中的同名同参数的方法进行覆盖操作。
重写的条件:1、子类重写的方法名和形参列表与父类中被重写的方法的方法名与形参列表相同;
2、子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符;
3、子类的返回值类型不大于父类被重写方法的返回值类型;
4、子类重写方法抛出的异常类型不大于父类被重写方法抛出的异常类型;
【实际开发中,重写的子类方法的权限修饰符、返回值类型以及抛出的异常类型都与父类中
被重写的方法保持一致】
两者区别:
- 重载不表现为多态性,重写表现为多态性;
- 从编译和运行的角度看:
重载是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数列表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。他们的调用地址在编译期就绑定了。Java的重载是可以包括父类和子类的,即子类可以重载父类同名不同参的方法
所以:对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为是“动态绑定”或者“早绑定”;而对于多态而言,只有等到方法被调用执行的那一刻,解释运行器才会确定所要调用的具体方法,这称为“动态绑定”或者“晚绑定”,重写即是如此。