Menu
CoddyTech

Tổng quan về các mức truy cập

Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 10 trên 87.

Bộ điều chỉnh quyền truy cập kiểm soát nơi có thể truy cập các trường và phương thức. Java có bốn cấp độ kiểm soát quyền truy cập.

Bộ bổ nghĩaCùng lớpCùng packageLớp conMọi nơi
privateCóKhôngKhôngKhông
default (không có từ khóa)CóCóKhôngKhông
protectedCóCóCóKhông
publicCóCóCóCó
public class BankAccount {
    private double balance;      // Chỉ trong lớp này
    String accountType;          // Mặc định: chỉ trong cùng package
    protected String owner;      // Trong cùng package và các lớp con
    public String bankName;      // Có thể truy cập từ mọi nơi
}

private là mức hạn chế nhất, hãy dùng nó cho dữ liệu nội bộ mà không bao giờ được truy cập trực tiếp. public là mức mở nhất, hãy dùng nó cho các phương thức mà lớp khác cần gọi.

Khi bạn không chỉ định bộ sửa đổi nào, Java sử dụng quyền truy cập mặc định (còn gọi là package-private). Quyền này chỉ cho phép truy cập trong cùng một package.

class Helper {           // Lớp có quyền truy cập mặc định
    void assist() { }    // Phương thức có quyền truy cập mặc định
}

Hãy chọn cấp độ truy cập hạn chế nhất mà vẫn giúp code hoạt động. Cách này bảo vệ dữ liệu và giúp bạn dễ bảo trì code hơn.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống quản lý hồ sơ Student để minh họa cách các từ bổ nghĩa quyền truy cập (access modifiers) kiểm soát khả năng hiển thị trên nhiều tệp khác nhau.

Bạn sẽ tạo hai tệp để sắp xếp code:

  • Student.java: Định nghĩa một lớp Student với các trường có mức độ truy cập khác nhau:
    • Trường private: studentId (String), chỉ có thể truy cập bên trong lớp Student
    • Trường mặc định (không có từ bổ nghĩa): grade (int), có thể truy cập trong cùng gói
    • Trường protected: name (String), có thể truy cập trong cùng gói và trong các lớp con
    • Trường public: school (String), có thể truy cập ở mọi nơi
    Thêm một hàm khởi tạo để thiết lập cả bốn trường, cùng một phương thức public có tên getInfo() trả về một chuỗi theo định dạng: "[studentId] name - Grade grade at school"
  • Main.java: Tạo một đối tượng Student và minh họa những trường nào có thể được truy cập trực tiếp từ bên ngoài lớp. In trực tiếp trường school, sau đó in kết quả của getInfo() để hiển thị toàn bộ thông tin của học sinh.

Bạn sẽ nhận được bốn đầu vào: studentId, name, grade và school, theo thứ tự đó.

Đầu ra của bạn gồm hai dòng: tên trường học được truy cập trực tiếp, tiếp theo là thông tin đầy đủ của học sinh từ phương thức getInfo().

Tự làm thử

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Đọc các giá trị đầu vào
        String studentId = scanner.nextLine();
        String name = scanner.nextLine();
        int grade = Integer.parseInt(scanner.nextLine());
        String school = scanner.nextLine();
        
        // TODO: Tạo đối tượng Student bằng các giá trị đầu vào
        
        
        // TODO: In trực tiếp trường school (có thể truy cập vì trường này là public)
        
        
        // TODO: In kết quả của getInfo() để hiển thị toàn bộ thông tin sinh viên
        
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Java online