Tôi tình cờ thấy đoạn trích này:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Điều này sẽ dẫn đến một lỗi biên dịch:
Lỗi: (15, 9) java: tham chiếu đến printSum không rõ ràng cả phương thức printSum (int, double) trong ParamTest và phương thức printSum (dài, dài) trong trận đấu ParamTest
Làm thế nào là mơ hồ? Không nên chỉ tham số thứ hai trong trường hợp này vì tham số đầu tiên đã là int? Các param đầu tiên không cần phải được thúc đẩy trong trường hợp này phải không?
Quá trình biên dịch thành công nếu tôi cập nhật mã để thêm phương thức khác:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
Hãy để tôi mở rộng chỉ để làm rõ. Mã dưới đây dẫn đến sự mơ hồ:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Sau đó, mã này dưới đây cũng dẫn đến sự mơ hồ:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Tuy nhiên, điều này không dẫn đến sự mơ hồ:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, double b) {
System.out.println("In longDBL " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Error:(15, 9) java: reference to printSum is ambiguous both method printSum(int,double) in ParamTest and method printSum(long,long) in ParamTest match
- đó không phải là phương thức mơ hồ, đó là lời gọi đến phương thức không rõ ràng.