方法重载是为了让方法名相同而形式参数不同的方法同时存在
1.方法重载区分仅靠方法参数
2.设计基本类型的重载,将会自动向上转型-参考5.2.2
3.为什么不能以方法返回值来区分方法重载
1>构造器也是需要方法重载的一个重要原因,可以通过不同的形式来构建一个对象。比如买电脑可以自定义配置
//构造器也是方法重载class Rock{int i;//没有参数去构建Rock实例Rock(){}//以有参数的形式去构建Rock实例Rock(int j){i = j;}}
方法重载是构造器必须的,但是其他方法也可以用于方法重载,比如去描述生活的晒太阳的场景
比如:以晒人的方式晒太阳、以晒被子的方式晒被子。在计算机中的话,得明确告诉JVM具体得操作行为,这就是方法得重载了。
//有待修改public class Overload{public void shai(Peoper p){}public void shai(Quilt q){}}
2>🤔:人可以区分晒太阳的含义,Java如何区分重名的方法呢?
区分规则:每一个方法都有一个独一无二的参数列表生活举例,比如以晒人的方式晒太阳、以晒被子的方式晒被子,我们将"晒太阳"作为方法名,人、被子作为参数
示例代码:
class People{ }class Quilt{ }public class OverloadDemo {public void shai(People p){System.out.println("以晒人的方式晒太阳");}public void shai(Quilt quilt){System.out.println("以晒被子的方式晒被子");}}
🤔:方法返回值是否可以作为区分方法重载的一个标识?
void f();int f(){return 1};//此时的调用将分不清调用的是谁f();//有时候我不需要返回值
故不用返回值来区分方法是因为有时我们不关心方法的返回值,只是要的是方法调用的其他效果。
3>基本类的重载会将参数进行提升(示例编码中不会对你造成麻烦,编辑器会自动帮你执行提升操作),
参考示例:
public class PrimitiveMethodLoading {/*void f1(char x){System.out.println("f1(char x)");}void f1(byte x){System.out.println("f1(byte x)");}void f1(short x){System.out.println("f1(short x)");}*/void f1(int x){System.out.println("f1(int x)");}void f1(long x){System.out.println("f1(long x)");}void f1(float x){System.out.println("f1(float x)");}// void f1(double x){// System.out.println("f1(double x)");// }public static void main(String[] args) {final PrimitiveMethodLoading loading = new PrimitiveMethodLoading();loading.f1('a');}}
