方法重载是为了让方法名相同而形式参数不同的方法同时存在
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');
}
}