java中的重载与重写 重载简述
在java语言中,同一个类中的两个或者两个以上的方法可以有同一个名字,只要他们的的参数声明不同即可,该方法被称为重载,这个过程称为方法的重载,它是实现java多态性的一种方式。
重载是友好的,它不要求你在调用一个方法之前转换数据类型,它会自动地寻找匹配的方法。方法的重载是在编译时刻就决定调用哪个方法了,和重写不同。最最常用的地方就是构造器的重载。
我们以代码为例
public class Test { static void method(byte b){ System.out.println ("method:byte"); } static void method(short s){ System.out.println ("method:short"); } static void method(int i){ System.out.println ("method:int"); } static void method(float f){ System.out.println ("method:float"); } static void method(double d){ System.out.println ("method:double"); } public static void main (String[] args) { method((byte)1); method(\'c\'); method(1); method(1L); method(1.1); method(1.1f); } }
输出结果:
method:byte method:int method:int method:float method:double method:float
重载总结:从上述输出结果可以看出:首先要寻找的是数据类型正好匹配方法。如果找不到,那么就提升为表达能力更强的数据类型,如上例没有正好容纳long的整数类型,那么就转换为 float类型的。如果通过提升也不能找到合适的兼容类型,那么编译器就会报错。反正是不会自动转换为较小的数据类型的,必须自己强制转换,自己来承担转变后果。char类型比较特殊,如果找不到正好匹配的类型,它会转化为int而不是short,虽然char是16位的。
重写简述
2.子类方法的访问级别不能低于父类相应方法的访问级别。
3.子类方法的返回值必须是父类方法返回值的子类或者和父类一样。
4.最好不要在父类构造函数中调用要被重写的方法。