JavaScript is required

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

class Question {
String s = "Outer";
public static void main(String[] args) {
S2 s2 = new S2();
s2.display();
}
};
class S1 {
String s = "S1";
void display() {
System.out.print(s);
}
}
class S2 extends S1 {
String s = "S2";
}

A.

S1

B.

S2

C.

Null

D.
S1S2
Trả lời:

Đáp án đúng: A


Đoạn chương trình Java này minh họa tính kế thừa và ghi đè biến (variable hiding). - Lớp `Question` chứa hàm `main`. Hàm `main` tạo một đối tượng `s2` thuộc lớp `S2` và gọi phương thức `display()` trên đối tượng đó. - Lớp `S1` có một biến `s` kiểu `String` được khởi tạo với giá trị "S1" và một phương thức `display()` in giá trị của biến `s` ra màn hình. - Lớp `S2` kế thừa từ lớp `S1` và cũng có một biến `s` kiểu `String` được khởi tạo với giá trị "S2". Khi `s2.display()` được gọi, phương thức `display()` của lớp `S1` được thực thi (vì `S2` không ghi đè phương thức này). Phương thức `display()` này in giá trị của biến `s` mà nó thấy. Trong trường hợp này, nó thấy biến `s` được định nghĩa trong lớp `S1`, do đó nó in ra "S1". Như vậy, kết quả in ra màn hình là "S1".

Câu hỏi liên quan