JavaScript is required

Đoạn mã sau có lỗi biên dịch nào sau?
class Student {
protected String name;
}
public class Man extends Student {
public static void main(String[] args) {
Man m = new Man();
m.name = "John";
}
}

A.
name has protected access in Student.
B.
Không có lỗi biên dịch
C.
class Man has no attribute name.
D.
class Man has no attribute or method name.
Trả lời:

Đáp án đúng: B


Lỗi biên dịch xảy ra do thuộc tính `name` của lớp `Student` được khai báo là `protected`. Trong lớp `Man`, phương thức `main` đang cố gắng truy cập trực tiếp vào thuộc tính `name` của đối tượng `m`. Vì lớp `Man` kế thừa từ lớp `Student`, nó có quyền truy cập vào các thuộc tính `protected` của lớp cha, *nhưng chỉ bên trong các phương thức của chính lớp Man*. Trong trường hợp này, việc truy cập `m.name` trực tiếp trong phương thức `main` là không được phép vì nó không nằm trong một phương thức của lớp `Man` mà là trực tiếp trong phương thức `static`. Để truy cập hoặc thay đổi giá trị của thuộc tính `name`, cần phải sử dụng các phương thức getter/setter hoặc truy cập trong một phương thức khác của lớp `Man`. Vì vậy, lỗi "name has protected access in Student" là chính xác.

Câu hỏi liên quan