使用重载,需要:签名,也就是方法名相同,但是参数类型||或参数个数||参数顺序至少一个不同
而返回值类型是随便的。
原因:
系统判断不同方法是通过方法的签名和参数,而不是签名、参数和返回值。
因此,判断是否重载的关键是参数,包括参数的类型和参数的个数、顺序。
/**
* 研究overload重载是是否包括返回类型的重载
* 此为测试类和子类
* 结论:使用重载,需要:签名,也就是方法名相同,但是参数类型||或参数个数||参数顺序至少一个不同
* 而返回值类型是随便的。
* 如果只是返回值不同,而参数类型和参数个数、顺序和前方法相同,则会报错:
* The return type is incompatible with OverloadClass.getOverloadClass(String)
* 翻译:xxx.xxx方法返回类型不匹配(被编译环境认定是重写,自动更正会让其和前方法的类型一致。
* 导致问题的理论原因:
* 系统判断不同方法是通过方法的签名和参数,而不是签名、参数和返回值。
* 因此,判断是否重载的关键是参数,包括参数的类型和参数的个数、顺序。
*
*/
public class OverloadClassTest extends OverloadClass {
public OverloadClassTest getOverloadClass(String myName) {
OverloadClassTest object = (OverloadClassTest) new OverloadClass();
return object;
}
/**
* 下面是重载本类中方法,报错为:
* Duplicate method aaa() in type OverloadClassTest
*/
public void aaa() {};
public String aaa() {
return "string aaa()";
}
//参数顺序不同也是被认定不同方法
public void aaa(String name, int count) {
}
public void aaa(int count, String name) {
}
}
//父类
class OverloadClass {
public void getOverloadClass(String myName) {
System.out.println("overloadclass getOverloadClass()");
new OverloadClass();
}
}