定义: 方法重载是指在同一个类中,允许存在多个同名方法,但要求它们的参数列表不同(参数类型、数量或顺序不同)。返回值类型可以相同或不同,但仅返回值不同不足以构成重载。
print(int)
和 print(String)
)。满足以下任一条件即可:
sum(int a)
和 sum(int a, int b)
sum(int a)
和 sum(double a)
sum(int a, String b)
和 sum(String a, int b)
❌ 无效重载示例(仅返回值不同):
int foo() { return 1; }
String foo() { return "1"; } // 编译错误!
Math.max()
支持不同数值类型。原因:
int
参数可能被提升为 double
)。示例:
void test(int x) { System.out.println("int"); }
void test(double x) { System.out.println("double"); }
test(10); // 输出 "int"(精确匹配优先)
test(10.0); // 输出 "double"
test('a'); // 输出 "int"(char自动转int)
原因: 泛型类型擦除后可能导致签名冲突。
示例:
// 编译错误!擦除后均为 List<Object>
void process(List<String> list) {}
void process(List<Integer> list) {}
解决: 改用不同方法名或添加非泛型参数区分。
class Calculator {
// 重载1:两个int相加
int add(int a, int b) {
return a + b;
}
// 重载2:三个int相加
int add(int a, int b, int c) {
return a + b + c;
}
// 重载3:两个double相加
double add(double a, double b) {
return a + b;
}
}
// 调用示例
Calculator calc = new Calculator();
calc.add(1, 2); // 调用重载1
calc.add(1.5, 2.5); // 调用重载3
方法重载是面向对象中实现代码简洁性和灵活性的重要手段,需严格遵循参数差异化的规则。设计时需注意类型转换和泛型擦除可能带来的陷阱。
没有搜到相关的文章