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位的。


重写简述 

Java重写只是存在在父子类之间的概念,子类只能重写父类的 非private和非final方法;对于不想让子类重写的发放可以将方法用private或者final来修饰;如果父类想让子类重写的方法可以用 protected方法来修饰;
1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
2.子类抛出的异常下不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
4.子类方法的返回值必须是父类方法返回值的子类或者和父类一样。
 
注意:
1.方法重写,子类的方法必须和父类要重写的方法、方法名、参数列表、返回值一样,否则就不是重写。

2.子类方法的访问级别不能低于父类相应方法的访问级别。

 

3.子类方法的返回值必须是父类方法返回值的子类或者和父类一样。

4.最好不要在父类构造函数中调用要被重写的方法。

原文地址:https://www.cnblogs.com/zhangxiangguo/p/6734464.html