当前位置:  首页>> 技术小册>> Java语言基础5-面向对象初级

9.1 概念
方法重载:在同一类中,允许存在多个同名方法,只要它们的参数个数或参数类型不同即可。
9.2 特点
和返回值类型无关,只看参数列表,且参数列表必须不同(参数个数或参数类型)。
调用的时候,根据方法参数列表的不同来区别。
9.3 应用示例
示例:

  1. package com.github.overload;
  2. /**
  3. * @author maxiaoke.com
  4. * @version 1.0
  5. */
  6. public class Array {
  7. /**
  8. * 返回两个整数的和
  9. *
  10. * @param num1 num1
  11. * @param num2 num2
  12. * @return int
  13. */
  14. public int add(int num1, int num2) {
  15. return num1 + num2;
  16. }
  17. /**
  18. * 返回三个整数的和
  19. *
  20. * @param num1 num1
  21. * @param num2 num2
  22. * @param num3 num3
  23. * @return int
  24. */
  25. public int add(int num1, int num2, int num3) {
  26. return num1 + num2 + num3;
  27. }
  28. /**
  29. * 返回两个小数的和
  30. *
  31. * @param num1 num1
  32. * @param num2 num2
  33. * @return double
  34. */
  35. public double add(double num1, double num2) {
  36. return num1 + num2;
  37. }
  38. }

9.4 方法重载的好处

  • 使用方法重载,可以为编程带来方便:让方法的调用者,在调用方法的时候,不需要为了相似的功能去查阅文档,查找各种不同的方法名,降低学习成本,提高开发效率。
  • 例如:System.out.println() 方法就是典型的方法重载,其内部声明如下
  1. public void print(boolean b){}
  2. public void print(char c){}
  3. public void print(int i){}
  4. public void print(long l){}
  5. public void print(float f){}
  6. public void print(double d){}
  7. public void print(char s[]){}
  8. public void print(String s){}
  9. public void print(Object obj){}
  10. public void println(){}
  11. public void println(boolean x){}
  12. public void println(char x){}
  13. ...

9.5 练习

9.5.1 练习1

  • 编写程序,定义三个重载方法并调用,方法名为 mOverload 。
  • ① 三个方法分别接收一个 int 参数、两个 int 参数和一个 String 参数,分别执行平方运算并输出结果、乘法运算输出结果、以及输出字符串。
  • ② 在主类的 main 方法中分别用参数区别调用三个方法。

  • 示例:

  1. package com.github.overload.exec;
  2. /**
  3. * @author maxiaoke.com
  4. * @version 1.0
  5. */
  6. public class OverloadDemo1 {
  7. /**
  8. * 执行平方运算并输出结果
  9. *
  10. * @param num
  11. */
  12. public void mOverload(int num) {
  13. System.out.println((int) Math.pow(num, 2));
  14. }
  15. /**
  16. * 乘法运算并输出结果
  17. *
  18. * @param num1
  19. * @param num2
  20. */
  21. public void mOverload(int num1, int num2) {
  22. System.out.println(num1 * num2);
  23. }
  24. /**
  25. * 输出字符串信息
  26. *
  27. * @param str str
  28. */
  29. public void mOverload(String str) {
  30. System.out.println(str);
  31. }
  32. }
  1. package com.github.overload.exec;
  2. /**
  3. * @author maxiaoke.com
  4. * @version 1.0
  5. */
  6. public class OverloadDemo1Test {
  7. public static void main(String[] args) {
  8. OverloadDemo1 overloadDemo1 = new OverloadDemo1();
  9. overloadDemo1.mOverload(1);
  10. overloadDemo1.mOverload(1, 2);
  11. overloadDemo1.mOverload("你好,世界");
  12. }
  13. }

9.5.2 练习2

  • 定义三个重载方法 max() ,第一个方法求两个 int 值中的最大值,第二个方法求两个 double 值中的最大值,第三个方法求三个 double 值中的最大值,并分别调用这三个方法。

  • 示例:

  1. package com.github.overload.exec;
  2. /**
  3. * @author maxiaoke.com
  4. * @version 1.0
  5. */
  6. public class ArrayDemo {
  7. /**
  8. * 求两个int值的最大值
  9. *
  10. * @param num1 num1
  11. * @param num2 num2
  12. * @return int
  13. */
  14. public int max(int num1, int num2) {
  15. return num1 > num2 ? num1 : num2;
  16. }
  17. /**
  18. * 求两个double值的最大值
  19. *
  20. * @param num1 num1
  21. * @param num2 num2
  22. * @return double
  23. */
  24. public double max(double num1, double num2) {
  25. return num1 > num2 ? num1 : num2;
  26. }
  27. /**
  28. * 求三个double值的最大值
  29. *
  30. * @param num1 num1
  31. * @param num2 num2
  32. * @param num3 num3
  33. * @return double
  34. */
  35. public double max(double num1, double num2, double num3) {
  36. return num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);
  37. }
  38. }
  1. package com.github.overload.exec;
  2. /**
  3. * @author maxiaoke.com
  4. * @version 1.0
  5. */
  6. public class ArrayDemoTest {
  7. public static void main(String[] args) {
  8. ArrayDemo demo = new ArrayDemo();
  9. int max = demo.max(1, 2);
  10. System.out.println("max = " + max);
  11. double max1 = demo.max(1.1, 2.2);
  12. System.out.println("max1 = " + max1);
  13. double max2 = demo.max(1.1, 1.2, 1.3);
  14. System.out.println("max2 = " + max2);
  15. }
  16. }