Cho đoạn mã sau đây. Hãy chọn phát biểu đúng
Dog rover,
fido;
Animal anim;
rover = new Dog();
anim = rover;
fido = (Dog) anim;
Dog rover,
fido;
Animal anim;
rover = new Dog();
anim = rover;
fido = (Dog) anim;
fido;
Animal anim;
rover = new Dog();
anim = rover;
fido = (Dog) anim;
Trả lời:
Đáp án đúng: D
Đoạn mã trên hoàn toàn hợp lệ và sẽ biên dịch và thực thi thành công.
* **Dòng 1-3:** Khai báo các biến:
* `rover` kiểu `Dog`.
* `fido` kiểu `Dog`.
* `anim` kiểu `Animal`.
* **Dòng 5:** Khởi tạo một đối tượng `Dog` mới và gán cho `rover`.
* **Dòng 6:** Gán `rover` (kiểu `Dog`) cho `anim` (kiểu `Animal`). Đây là upcasting, hoàn toàn hợp lệ vì `Dog` là một lớp con của `Animal`.
* **Dòng 7:** Ép kiểu `anim` (kiểu `Animal`) về `Dog` và gán cho `fido`. Vì `anim` thực tế đang tham chiếu đến một đối tượng `Dog`, việc ép kiểu này là an toàn và không gây ra lỗi.
Vì vậy, không có dòng nào gây ra lỗi biên dịch hoặc ngoại lệ trong quá trình thực thi.