JavaScript is required

Đoạn lệnh nào sẽ đưa ra lỗi biên dịch? Chọn một câu trả lời

A.
class A { public A(int x) {} }
B.
class A {} class B extends A { B() {}}
C.
Class A { A() {}} class B { public B() {} }
D.
class Z { public Z(int) {} } class A extends Z { }
Trả lời:

Đáp án đúng: D


Đáp án D sẽ gây ra lỗi biên dịch. Trong Java, khi một lớp kế thừa một lớp khác, constructor của lớp con phải gọi constructor của lớp cha. Nếu lớp cha không có constructor mặc định (không tham số), lớp con phải явный gọi một constructor của lớp cha bằng `super(...)`. Trong trường hợp này, lớp `Z` chỉ có constructor với tham số `int`, do đó lớp `A` phải gọi `super(someIntValue)` trong constructor của nó. Vì lớp `A` không có constructor nào cả, trình biên dịch sẽ cố gắng tạo một constructor mặc định, constructor này sẽ ngầm gọi `super()`, dẫn đến lỗi vì lớp `Z` không có constructor không tham số. Các đáp án khác: - A: Đúng cú pháp. - B: Đúng cú pháp. Lớp `B` kế thừa `A` và có constructor mặc định. - C: Đúng cú pháp.

Câu hỏi liên quan