从定义上看二者区别:
重载:是在同一个类下定义相同名字但是参数不同或者返回类型不同的多个方法
这里所说的参数不同可以分为:
1、参数类型不相同
2、参数个数不相同
重写:是当子类继承父类后,对父类已经存在的方法进行重写覆盖操作,达到子类所想达到的实际运用效果(就比如父亲之前是拿钱做服装行业的,儿子继承父亲的财产后,并不想做服装生意,他有自己的想法,想开IT公司)
这里有几个注意的点:
1、重写的权限修饰符要不小于父类中的权限修饰符(比如父亲盖了一层楼,当你继承父亲后你起来当家了,你只能是往更高楼层盖,再怎么不堪父亲那一层楼也还是在的)
2、子类的重写方法类型可以跟父类一样,或者是用父类中被重写方法类型的子类(比如父类用的是Object,子类重写方法类型可以是Object也可以是String)
3、当调用子类的构造器时,会默认调用父类的无参构造器
从编译运行角度看二者区别:
重载:编译器会根据不同的参数表或者不同的返回类型对同名的方法进行修饰,对于编译器而言,此时的同名方法就成了不同了方法(因为编译器会对他们进行修饰)。他们的调用地址在编译期间就被绑定了,Java的重载是包括父类和子类的,即子类可以重载父类同名不同参的方法。
所以:对于重载而言在方法调用前,编译器就确定了要调用的方法,这被称为**“早绑定”或“静态绑定”**;
重写:重写是对于多态层面而谈的,只有等到调用方法的那一刻,解释运行器才会确定要调用的具体方法,这被称为**“晚绑定”或“动态绑定”**;
希望该文章对你们有帮助哈,有帮到你们的麻烦点个赞哈,有兴趣的朋友可以关注一下公众号,公众号上会发布一些最近行业常用的技术,还有一些自己见解的文章。