Giả sử cho các lớp như trong khai báo như trên. Kết quả hiển thị của đoạn chương trình là:

Trả lời:
Đáp án đúng: A
Đoạn code sử dụng tính kế thừa. Lớp `B` kế thừa từ lớp `A`.
1. **Khởi tạo đối tượng `a`:** `A a = new A(1);` Đối tượng `a` thuộc lớp `A` được tạo ra. Giá trị `x` của `a` được khởi tạo là 1.
2. **Khởi tạo đối tượng `b`:** `B b = new B(2);` Đối tượng `b` thuộc lớp `B` được tạo ra. Tham số `x = 2` được truyền vào constructor của `B`. Trong constructor của `B`, lệnh `super(x)` gọi constructor của lớp cha `A`, do đó giá trị `x` của lớp `A` sẽ là 2. Giá trị `y` của đối tượng `b` được khởi tạo là `x + 0.5 = 2 + 0.5 = 2.5`.
3. **Gán `a = b`:** `a = b;` `a` bây giờ tham chiếu đến đối tượng `b`. Lưu ý rằng `a` vẫn là một biến kiểu `A`, nhưng nó đang trỏ đến một đối tượng kiểu `B`.
4. **In `a.x` và `((B) a).y`:**
* `a.x`: Vì `a` là kiểu `A` và đang trỏ đến một đối tượng của `B` (đã được gán `a = b`), và lớp `B` không ghi đè thuộc tính `x` của lớp `A`, nên khi gọi `a.x`, nó sẽ sử dụng `x` của lớp `A`. Vì constructor của `A` đã được gọi với `x = 2` (qua lời gọi `super(x)` từ constructor của `B`), giá trị của `a.x` là 2. Tuy nhiên, khi tạo đối tượng `B`, constructor của lớp A được gọi trước nên `x = 2`, sau đó gọi `showX()` ghi đè lại giá trị `x= x/2.0 = 2/2.0 = 1.0`. Vậy `a.x = 1.0 + 0.5 = 1.5`
* `((B) a).y`: Ép kiểu `a` về kiểu `B` cho phép truy cập thuộc tính `y` của lớp `B`. Giá trị của `y` đã được khởi tạo là 2.5.
Vậy, kết quả in ra là `x = 1.5` và `y = 2.5`.
Cùng ôn thi với bộ câu hỏi trắc nghiệm môn Lập trình hướng đối tượng có đáp án mà tracnghiem.net chia sẽ dưới đây, nhằm giúp các bạn sinh viên chuyên ngành chuẩn bị cho kì thi sắp tới.
50 câu hỏi 60 phút
Câu hỏi liên quan

FORM.08: Bộ 130+ Biểu Mẫu Thống Kê Trong Doanh Nghiệp

FORM.07: Bộ 125+ Biểu Mẫu Báo Cáo Trong Doanh Nghiệp

FORM.06: Bộ 320+ Biểu Mẫu Hành Chính Thông Dụng

FORM.05: Bộ 330+ Biểu Mẫu Thuế - Kê Khai Thuế Mới Nhất

FORM.04: Bộ 240+ Biểu Mẫu Chứng Từ Kế Toán Thông Dụng
