JavaScript is required

Đoạn mã sau có lỗi biên dịch gì?
class Person {
protected String name;
public int age;
};
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.name = "Tom";
}
}

A.
Không có lỗi biên dịch.
B.
name has protected access.
C.
age has protected access.
D.
name has public access.
Trả lời:

Đáp án đúng: B


Đoạn mã trên có lỗi biên dịch vì biến `name` trong lớp `Person` được khai báo là `protected`. Điều này có nghĩa là `name` chỉ có thể được truy cập từ bên trong lớp `Person`, từ các lớp con của `Person`, và từ các lớp trong cùng package. Trong đoạn mã trên, biến `name` đang được truy cập trực tiếp từ lớp `Main`, là một lớp khác package (ngầm định) và không phải là lớp con của `Person`. Do đó, trình biên dịch sẽ báo lỗi "name has protected access". Biến `age` được khai báo là `public` nên có thể truy cập từ bất kỳ đâu.

Câu hỏi liên quan