JavaScript is required

Hãy cho biết kết xuất của đoạn chương trình sau:

public class S1 {
public static void main(String[] args) {
new S2();
}
S1() {
System.out.print("S1");
}
}
class S2 extends S1 {
S2() {
System.out.print("S2");
}
}

A.

S1

B.

S2

C.

S1S2

D.
S2S1
Trả lời:

Đáp án đúng: C


Đoạn chương trình Java này liên quan đến việc khởi tạo đối tượng và thứ tự gọi constructor trong quan hệ kế thừa. 1. **`public class S1`**: Định nghĩa một lớp tên là `S1`. 2. **`public static void main(String[] args)`**: Phương thức `main` là điểm bắt đầu của chương trình. Bên trong `main`, một đối tượng của lớp `S2` được tạo ra: `new S2();`. 3. **`S1() { System.out.print("S1"); }`**: Đây là constructor của lớp `S1`. Khi một đối tượng của `S1` (hoặc một lớp con của `S1`) được tạo, constructor này sẽ in ra "S1". 4. **`class S2 extends S1`**: Lớp `S2` kế thừa từ lớp `S1`. 5. **`S2() { System.out.print("S2"); }`**: Đây là constructor của lớp `S2`. Khi một đối tượng của `S2` được tạo, constructor này sẽ in ra "S2". Khi `new S2()` được gọi, các bước sau xảy ra: - Đầu tiên, constructor của lớp cha (`S1`) được gọi một cách ngầm định trước khi constructor của lớp con (`S2`) được thực thi. Điều này đảm bảo rằng các thuộc tính và trạng thái của lớp cha được khởi tạo trước khi lớp con thực hiện việc khởi tạo của riêng nó. - Do đó, "S1" được in ra từ constructor của `S1`. - Tiếp theo, constructor của `S2` được thực thi và in ra "S2". Kết quả là, chương trình in ra "S1S2".

Câu hỏi liên quan