重载的好处在于,对象在不同状态下(多态)调用重载函数得到的结果可以不一样。
(在编译期间就知道你有多少种方式来解决问题。调用的时候,虽然方法名字相同,但根据参数表可以自动调用对应的函数。)
比如你去取钱,可以在ATM中取,也可以在柜台处理。至于你是那种我们不得而知,我只知道你去“取钱”(如同重载的函数名),这两种方式有不同的载体与你完成操作(ATM、柜台服务员),因此他们成为你区分这两个“取钱”的方式,就像重载函数通过所传递的参数来区分一样
package cn.tedu.amethod;
/*普通方法与构造方法的重载*/
/* 重载与返回值类型无关
* */
public class OverLoad {
public static void main(String[] args) {
//实例化一个student对象,分别调用了这个对象的3中方法
Test1 student = new Test1();
student.method1();
student.method1(1,"1242");
student.method1("asxd",3);
student.method2(1,"String");
student.method2("St",12);
/*注意:如果我们在Student类中定义了一个带参数的构造函数,但是没有写无参的构造函数,
*这个时候我们在主函数中就不能定义 Student st = new Student();
*如果在Student类中加上无参的构造函数就可以实现这样的实例化。*/
Student student1 = new Student();
Student zhangsan = new Student(13, "张三");
Student lisi = new Student("李四", 23);
System.out.println(zhangsan);
System.out.println(lisi);
System.out.println(zhangsan.name+lisi.name);
}
}
class Test1{
public void method1(){
System.out.println("该普通方法没有参数");
}
//参数类型不同
public void method1(int i,String j){
System.out.println("该函数有第一个参数为int="+i+"第二个String="+j+"的两个参数");
}
public void method1(String a,int b){
System.out.println("该函数有第一个参数为S"+a+"第二个int为"+b+"的两个参数");
}
//返回值类型不同
void method2(int i,String j){
System.out.println("返回值类型为void");
}
int method2(String j,int i){
System.out.println("返回值类型为int");
return i;
}
}
class Student{
String name;
int age;
public Student(){
System.out.println("构造fangfa的无参");
}
// Student(){
// System.out.println("asadaa");
// }
public Student(int a,String b){
age=a;
name=b;
}
public Student(String a,int b){
age=b;
name=a;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}