tôi có dưới đây kịch bản:phương pháp tĩnh trong lớp có cùng chữ ký như phương pháp mặc định trong giao diện
class C {
static void m1() {}
}
interface I {
default void m1() {}
}
//this will give compilation error : inherited method from C cannot hide public abstract method in I
class Main extends C implements I {
}
Dưới đây là những câu hỏi của tôi:
Tôi biết rằng phương pháp dụ sẽ ghi đè lên các phương pháp mặc định nhưng nếu phương thức tĩnh trong lớp có cùng chữ ký như phương thức mặc định trong Giao diện thì sao?
Nếu tĩnh phương pháp
m1()
trongclass C
sẽ được công khai sau đó lỗi biên dịch sẽ là:tĩnh phương pháp m1() mâu thuẫn với phương pháp trừu tượng trong I.
vì vậy khi sửa đổi lần truy cập đã được mặc định nó đã cố gắng để ẩn và khi nó được công khai nó là mâu thuẫn. tại sao sự khác biệt này? khái niệm đằng sau nó là gì?
Trình biên dịch nào bạn đang sử dụng? – Hulk
Điều này không nên phụ thuộc vào sự hiện diện của việc triển khai mặc định hoặc mức truy cập - lỗi biên dịch phải giống nhau, theo ý kiến của tôi. Trong nhật thực, luôn luôn là "Phương thức tĩnh này không thể ẩn phương thức cá thể của tôi", với oracle jdk 1.8.0_121 "[đường dẫn] /A.java: [5,17] m1() trong [đường dẫn] .A không thể triển khai m1() trong [path] .I phương thức ghi đè là tĩnh " – Hulk
Tôi đang sử dụng 1.8 là tốt, nó cho thấy lỗi biên dịch khác nhau – user2185089