在Java学习的过程中,java重载和重写的区别是什么?重载Overloading是一个类中多态性的一种表现;重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。更为详细的区别,千锋小编今天就为大家解答。
1.Java重载(Overloading)
(1) 重载Overloading是一个类中多态性的一种表现。方法重载是让类以统一的方式处理不同类型数据的一种方法。多个同名函数同时存在,具有不同的参数个数或者类型。
(2)Java方法重载,就是在类中创建多个方法,它们同名但不同参数、不同定义。
多态性:调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。
(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可相同可不同。无法以返回型别作为重载函数的区分标准。
2.Java重写(Overriding)
(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,则该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,不需要重新编写相同的方法。
但有时子类并不想原本地继承父类的方法,而想做一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使super关键字,该关键字引用了当前类的父类。
(3)子类函数的访问修饰权限不能少于父类的。
动态绑定的内幕:
1、编译器检查对象声明的类型和方法名,从而获取所有候选方法。尝试把上例Base类的test注释掉,这样再编译就无法通过。
2、重载决策:编译器检查方法调用的参数类型,从上述候选方法选出唯一一个(其间会有隐含类型转化)。如果编译器找到多于一个或者零个,此时编译器就会报错。试着把上例Base类的test(byte b)注释掉,这时运行结果是1 1。
3、若方法类型为priavte static final,java采用静态编译,编译器会准确知道具体该调用哪个方法。
4、当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用对象的实际类型相匹配的方法版本。
总之,二者显著的特征是重载的参数类型、个数、顺序至少有一个不相同;重写的方法名、参数、返回值相同。通过这样的解释,你理解Java重载和重写的区别了么?如果在java学习的过程中遇到问题,可以咨询千锋教育客服,也可以了解Java培训课程,得到系统的Java知识培训。