1、概念:
重载:在一个类中可以一个以上的同名方法,只要他们的参数个数,或参数类型,或参数的顺序不同即可
重写:子类继承父类以后,可以对从父类中继承来的同名同参数方法,进行覆盖操作
2、具体规则不同
重载:
1、必须有不同的参数列表
2、可以有不同的返回值类型,只要参数列表不同就可以了
3、可以有不同的访问修饰符
4、可以抛出不同的异常
重写:
1、子类重写的方法名和形参列表与父类中被重写的的方法名和形参列表相同
2、子类重写的方法的权限修饰符不小于父类被重写方法的权限修饰符(子类不能重写父类中声明为private权限的方法)
3、子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
3.1、父类被重写的返回值类型是void,则子类重写的方法的返回值类型只能是void
3.1、父类被重写的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类型或者A类的子类
3.1、父类被重写的返回值类型是基本数据类型,则子类重写的方法的返回值类型也必须是相同的基本数据类型
4、子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
注意:对于子类和父类中的同名同参数的方法
声明为static的,不考虑重写,因为static修饰的方法为静态方法,是属于类的, 不可以被重写。
声明为非static的,考虑重写。
3、多态性:重载不具备多态性,重写具备多态性
对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”;
而对于多态,只等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”。
引用Bruce Eckel的话:不要犯傻,只要它不是晚绑定,他就不是多态。
4、类的关系
重写是子类和父类之间的关系,是垂直关系。
重载是同一个类中的方法之间的关系,是水平关系。
重写和重载的区别
最新推荐文章于 2023-03-14 21:43:13 发布