我认为,如果你谈论函数/方法重载的真正好处,没有它你将无法绕过,那么正如你在问题中指出的那样,你不会找到任何东西。
但它有什么帮助呢?让我们考虑这个例子。
假设我正在制作一个应用程序,该应用程序通过他的名字查找一个人,并且我声明并定义了一个方法
public Person[] findPerson(String name)
现在我们得到了一个要求,我们必须通过他的出生日期找到一个人,所以引入一个新的方法
public Person[] findPerson_byDOB(Date date)
让我们假设这种情况还在继续,并且我的应用程序中有很多方法。
public Person[] findPerson(String name)
public Person[] findPerson_byDOB(Date date)
public Person[] findPerson_byAddress(Address address)
public Person[] findPerson_bySSN(SSN ssn)
public Person[] findPerson_byDepartment(Department department)
public Person[] findPerson_byMobile(Mobile mobile)
这只是一部分;当我们被要求引入多个参数时,这可以继续,例如
public Person[] findPerson_byMobileAndAddress(Mobile mobile, Address address)
public Person[] findPerson_byAddressAndDepartment(Address address, Department department)
public Person[] findPerson_byDOBAndDepartment(DOB dob, Department, department)
public Person[] findPerson_byAddressAndDOB(Address address, DOB dob)
还有更多...
虽然这似乎有点夸张,但相信我,在制作实际的行业级应用程序时,我们可能会遇到这样一种情况,即我们得到了成百上千种这样的方法,最终我们需要所有这些方法的目录来说明它们的实际作用。
当我们必须使用它时,当我们必须找到所有这些方法的名称时,这实际上是一场噩梦。
但是,当所有参数都不同时,我们可以为函数指定相同的名称,并且它确实变得非常容易记住。
public Person[] findPerson(String name)
public Person[] findPerson(Date date)
public Person[] findPerson(Address address)
public Person[] findPerson(SSN ssn)
public Person[] findPerson(Department department)
public Person[] findPerson(Mobile mobile)
public Person[] findPerson(Mobile mobile, Address address)
public Person[] findPerson(Address address, Department department)
public Person[] findPerson(DOB dob, Department, department)
public Person[] findPerson(Address address, DOB dob)
现在,正如大卫在他的回答中指出的那样,我们都知道如何获得整数的值;也许我们在某个地方读过它。String
static String.valueOf(new Integer(1));
但是您知道还有多少方法以相同的名称重载吗?
static String.valueOf(boolean b)
static String.valueOf(char c)
static String.valueOf(char[] data)
static String.valueOf(double d)
static String.valueOf(float f)
static String.valueOf(int i)
static String.valueOf(long l)
static String.valueOf(Object obj)
好处是您不必全部记住它们。你甚至不必猜测,因为它自始至终都是同一个名字。
根据Namnodorel的建议进行编辑
考虑类的这种重载方法。PrintStream
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)
如果我们必须写,想想可读性:
void println_emptyLine()
void println_boolean(boolean x)
void println_character(char x)
void println_characterArray(char[] x)
void println_double(double x)
void println_float(float x)
void println_integer(int x)
void println_long(long x)
void println_object(Object x)
void println_string(String x)