方法重载是Java中一个很重要的概念,它是类名的不同表现形式。构造函数其实也是重载的一种,还有一种是方法的重载。
1 package day02; 2 3 4 5 public class Apple { 6 7 int num; 8 9 String color; 10 11 public Apple() { 12 13 } 14 15 16 public Apple(int num, String color) { 17 18 } 19 20 21 public int getApple(int num) { 22 23 return num; 24 25 } 26 27 public String getApple(String color) { 28 29 return color; 30 31 } 32 33 34 }
如上所示,有两种重载的方式,一种是Apple构造函数的重载,一种是getApple方法的重载。那有很多相同的名字,Java是如何知道调用哪个方法呢?每个重载的方法都有独一无二的参数列表。其中包括参数的类型、顺序、参数数量等,满足一种一个因素就构成了重载的必要条件。
重载的条件:
第一,方法名称必须相同。
第二,参数列表必须不同(个数不同或类型不同,参数类型排列顺序不同等)。
第三,方法的返回类型可以相同也可以不同。
第四,仅仅返回类型不同不足以成为方法的重载。
第五,重载是发生在编译时的,因为编译器可以根据参数的类型来选择使用哪个方法。
方法的重写与重载名字很相似,但是完全不同的东西。方法的重写描述的是子类对父类直接的。重载指的是同一类中的,例如:
1 package day02; 2 3 4 5 class Banana extends Fruit { 6 7 @Override 8 9 public void eat() { 10 11 System.out.println("eat banana"); 12 13 } 14 15 } 16 17 18 19 class Fruit { 20 21 public void eat() { 22 23 System.out.println("eat fruit"); 24 25 } 26 27 }
可以看到,子类Banana中的方法eat与父类Fruit中的方法eat方法名相同。重写的原则:
第一,重写的方法必须和父类保持一致,包括返回值类型、方法名、参数列表都一样。
第二,重写的方法使用@Override注解来标识。
第三,子类中重写方法的访问权限不能低于父类中方法的访问权限。