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 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 (constructor không tham số) và lớp con không gọi một constructor khác của lớp cha một cách tường minh bằng `super()`, trình biên dịch sẽ báo lỗi. Trong trường hợp này, lớp `Z` chỉ có constructor với tham số `int`, lớp `A` kế thừa `Z` nhưng không gọi `super(int)` trong constructor của nó (hoặc không có constructor nào cả), do đó gây ra lỗi biên dịch. Các phương án A, B, và C đều hợp lệ và không gây ra lỗi biên dịch.

Câu hỏi liên quan