Chỉ bằng thử nghiệm, tôi phát hiện ra rằng các phương thức không tĩnh Java ghi đè tất cả các phương thức có cùng tên trong phạm vi ngay cả ở ngữ cảnh tĩnh. Ngay cả khi không cho phép quá tải tham số. Giống nhưNhập Java tĩnh
import java.util.Arrays;
import static java.util.Arrays.toString;
public class A {
public static void bar(Object... args) {
Arrays.toString(args);
toString(args); //toString() in java.lang.Object cannot be applied to (java.lang.Object[])
}
}
Tôi không thể tìm thấy bất kỳ điều gì về điều này trong thông số kỹ thuật. Đây có phải là một lỗi? Nếu không, có lý do gì để thực hiện ngôn ngữ như vậy không?
UPD: Java 6 không biên dịch ví dụ này. Câu hỏi đặt ra là - tại sao?
Dường như nó đang ám chỉ đối tượng của siêu đối tượng 'toString()' –
IMHO, toàn bộ chức năng nhập tĩnh là một khái niệm không tốt, gây ô nhiễm không gian tên và khả năng đọc mã sai. Đừng lười biếng, không quá khó để gõ lớp/giao diện kèm theo của một hàm tĩnh, chúng ta có các IDE cho nó. Cố gắng tránh sử dụng nhập tĩnh. – buc
@Jigar Joshi, Nó seams như vậy. Nhưng tôi không thể tìm thấy bất cứ điều gì về. Và hơn nữa, chúng ta không thể gọi 'Object.toString' từ ngữ cảnh tĩnh nên tôi không thấy bất kỳ logic nào trong hành vi này. –