一、什么是Java方法重载
在同一个类中有多个方法名一致的方法,但是这些方法参数列表不同,代码也不一样,那么我们就叫做方法重载。
在Java中,方法重载也是 Java 多态性的一种实现。
Java 支持动态根据实参和形参匹配度来确定到底要使用哪一个方法。
比如我们Java常用的输出语句 System.out.print(); 你可以传入不同数据类型的值,它都可以进行输出操作。
二、最简单的例子 —— a + b
先来一个最简单的例子 —— a + b。
1. public class Main { 2. public static int add(int x, int y) { 3. return x + y; 4. } 5. public static void main(String[] args) { 6. System.out.println(add(1, 2)); 7. } 8. }
结果可想而知,输出就是 —— 3 。
那么如果再写一个重名的方法呢?
IDE就报错了,因为被系统认为是完全一样的方法,哪怕返回类型不一致也不行
在Java中,如果多个方法的方法名相同,则必须保证参数类型不完全一致。
就像下面这样,参数类型分别是 int 和 double。
1. public class Main { 2. public static int add(int x, int y) { 3. return x + y; 4. } 5. public static int add(double x, double y) { 6. return (int)(x + y); 7. } 8. public static void main(String[] args) { 9. System.out.println(add(1, 2)); 10. System.out.println(add(1.9, 2.5)); 11. } 12. }
这两个方法的形参列表不一致,就可以实现方法重载了。
三、综合应用 —— 多功能计算器
首先编写一个计算器类—— Calculation,实现add()方法的五中不同重载
1. public class Calculation { 2. public int add(int x,int y) { 3. return x + y; 4. } 5. public double add (double x, double y) { 6. return x + y; 7. } 8. public float add (float x, float y) { 9. return x + y; 10. } 11. public String add (String x, String y) { 12. return x + y; 13. } 14. public long add (long x, long y) { 15. return x + y; 16. } 17. }
接着在测试方法中,分别调用这五种重载。
1. public class Main { 2. public static void main(String[] args) { 3. Calculation c = new Calculation(); 4. System.out.println("Int add = " +c.add(1,2)); 5. System.out.println("Float add = " +c.add(360.2f,159.8f)); 6. System.out.println("Double add = " +c.add(632.84,681.68)); 7. System.out.println("Long add = " +c.add(326866l,987654l)); 8. System.out.println("String add = " + c.add("hello","zwz")); 9. } 10. }
我们可以看到,对于 add() 方法,可以传入不同数据类型的参数,已实现 Java 方法重载。
四、方法重载和方法覆盖的异同
Java方法覆盖指的是在继承的父类和子类中,子类对父类的方法进行了重写,即在不同的类中实现。
比如有一个计算机子类 —— MyCalculation,继承于刚刚的 Calculation 类。
1. public class MyCalculation extends Calculation{ 2. public int add(int x,int y) { 3. return x + y + 1; 4. } 5. }
我们在测试方法中实例化一个 MyCalculation 对象,发现依然可以调用父类 Calculation 的重载方法。
但是在调用子类 MyCalculation 重写的add(int , int)方法时,可以发现子类的方法覆盖掉了父类。
1. public class Main { 2. public static void main(String[] args) { 3. MyCalculation myCalculation = new MyCalculation(); 4. System.out.println(myCalculation.add(1, 2)); 5. } 6. }
即结果没有遵循父类 Calculation 的 add(int,int),而是遵循了子类 MyCalculation 的 add(int,int)。
方法覆盖要求子类的方法申明必须和父类的完全一致,但方法重载则要求参数列表的形参不一样。
五、总结
本文对 Java 的方法重载和方法覆盖的知识点,在下一篇博客中,将讲解 Java函数命令行传参的知识。