Tôi đang gặp khó khăn khi hiểu câu hỏi này và giải thích câu trả lời cho câu hỏi tự kiểm tra SCJP 1.6. Đây là vấn đề:Var-arg của mảng đối tượng so với mảng đối tượng - cố gắng hiểu câu hỏi tự kiểm tra SCJP
class A { }
class B extends A { }
public class ComingThru {
static String s = "-";
public static void main(String[] args) {
A[] aa = new A[2];
B[] ba = new B[2];
sifter(aa);
sifter(ba);
sifter(7);
System.out.println(s);
}
static void sifter(A[]... a2) { s += "1"; }
static void sifter(B[]... b1) { s += "2"; }
static void sifter(B[] b1) { s += "3"; }
static void sifter(Object o) { s += "4"; }
}
Kết quả là gì? Câu trả lời là -434, nhưng những gì ném tôi ra là giải thích của cuốn sách. Nó hoàn toàn khác với cách khái niệm được giải thích trước đó trong chương.
"Nói chung, quá tải var-args phương pháp được lựa chọn cuối cùng. Hãy nhớ rằng mảng là đối tượng. Cuối cùng, một int có thể được đóng hộp đến một Integer và sau đó 'mở rộng' cho một đối tượng."
Tách lên, ai đó có thể vui lòng xác định thêm giải thích đó?
- Nói chung, các phương pháp var-arg bị quá tải được chọn cuối cùng.
- Mảng là đối tượng (tôi thực sự hiểu điều đó, nhưng tại sao lại liên quan đến câu hỏi này).
- Một int có thể được đóng hộp đến một số nguyên và sau đó "mở rộng" cho một đối tượng.
Cảm ơn!
Cảm ơn lời giải thích tuyệt vời! –
@ hal100001, luôn sẵn sàng trợ giúp - khi tất cả các câu trả lời đều được ghi nhớ, hãy nhớ chọn lựa tốt nhất/hữu ích nhất để chấp nhận (như bạn nói, msaeed cũng rất hữu ích - chúng tôi đang nói về cơ bản những điều tương tự của khóa học nhưng biểu hiện của tôi thì thông tục hơn, của anh ấy, có cấu trúc hơn). –