JavaScript is required

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à:
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à: (ảnh 1)

A.

x = 1.5 và y = 2.5

B.

x= 1.5 và y không xác định

C.

Giá trị của x và y là không xác định

D.
x không xác định và y = 2.5v
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