方法重载是为了让方法名相同而形式参数不同的方法同时存在

1.方法重载区分仅靠方法参数

2.设计基本类型的重载,将会自动向上转型-参考5.2.2

3.为什么不能以方法返回值来区分方法重载

1>构造器也是需要方法重载的一个重要原因,可以通过不同的形式来构建一个对象。比如买电脑可以自定义配置

  1. //构造器也是方法重载
  2. class Rock{
  3. int i;
  4. //没有参数去构建Rock实例
  5. Rock(){
  6. }
  7. //以有参数的形式去构建Rock实例
  8. Rock(int j){
  9. i = j;
  10. }
  11. }

方法重载是构造器必须的,但是其他方法也可以用于方法重载,比如去描述生活的晒太阳的场景

  1. 比如:以晒人的方式晒太阳、以晒被子的方式晒被子。在计算机中的话,得明确告诉JVM具体得操作行为,这就是方法得重载了。
  1. //有待修改
  2. public class Overload{
  3. public void shai(Peoper p){}
  4. public void shai(Quilt q){}
  5. }

2>🤔:人可以区分晒太阳的含义,Java如何区分重名的方法呢?

  1. 区分规则:每一个方法都有一个独一无二的参数列表
  2. 生活举例,比如以晒人的方式晒太阳、以晒被子的方式晒被子,我们将"晒太阳"作为方法名,人、被子作为参数

示例代码:

  1. class People{ }
  2. class Quilt{ }
  3. public class OverloadDemo {
  4. public void shai(People p){
  5. System.out.println("以晒人的方式晒太阳");
  6. }
  7. public void shai(Quilt quilt){
  8. System.out.println("以晒被子的方式晒被子");
  9. }
  10. }

🤔:方法返回值是否可以作为区分方法重载的一个标识?

  1. void f();
  2. int f(){return 1};
  3. //此时的调用将分不清调用的是谁
  4. f();//有时候我不需要返回值

故不用返回值来区分方法是因为有时我们不关心方法的返回值,只是要的是方法调用的其他效果。

3>基本类的重载会将参数进行提升(示例编码中不会对你造成麻烦,编辑器会自动帮你执行提升操作),
参考示例:

  1. public class PrimitiveMethodLoading {
  2. /*void f1(char x){
  3. System.out.println("f1(char x)");
  4. }
  5. void f1(byte x){
  6. System.out.println("f1(byte x)");
  7. }
  8. void f1(short x){
  9. System.out.println("f1(short x)");
  10. }*/
  11. void f1(int x){
  12. System.out.println("f1(int x)");
  13. }
  14. void f1(long x){
  15. System.out.println("f1(long x)");
  16. }
  17. void f1(float x){
  18. System.out.println("f1(float x)");
  19. }
  20. // void f1(double x){
  21. // System.out.println("f1(double x)");
  22. // }
  23. public static void main(String[] args) {
  24. final PrimitiveMethodLoading loading = new PrimitiveMethodLoading();
  25. loading.f1('a');
  26. }
  27. }