[OOP Basics] Hiểu rõ 4 Access Modifiers trong Java: Public, Private, Protected và Default
Trong lập trình hướng đối tượng (OOP), Tính đóng gói (Encapsulation) là một trong những cột trụ quan trọng nhất. Để thực hiện được điều này, chúng ta sử dụng các Access Modifiers (Phạm vi truy cập).
Nhiều bạn mới bắt đầu thường nhầm lẫn giữa protected và default, hoặc không biết khi nào nên dùng cái nào. Bài viết này sẽ giúp bạn phân biệt "bộ tứ quyền lực" này một cách đơn giản nhất.
1. Public: "Cánh cửa luôn mở"
Đây là mức độ truy cập rộng rãi nhất. Khi một class, method hoặc biến được khai báo là public, bất kỳ ai, ở bất kỳ đâu trong project đều có thể nhìn thấy và sử dụng nó.
Phạm vi: Toàn bộ project.
Khi nào dùng? Khi bạn muốn cung cấp các API hoặc các phương thức tiện ích cho mọi thành phần khác sử dụng.
2. Private: "Riêng tư tuyệt đối"
Ngược lại hoàn toàn với public, private là mức độ hạn chế nhất. Chỉ có các thành phần bên trong cùng một class mới có quyền truy cập.
Phạm vi: Chỉ trong nội bộ Class.
Khi nào dùng? Dùng cho các biến instance (thuộc tính) để bảo vệ dữ liệu, tránh việc bị thay đổi tùy tiện từ bên ngoài.
3. Default: "Người trong một nhà" (Package-private)
Nếu bạn không viết bất kỳ từ khóa nào trước biến hay hàm, Java sẽ tự hiểu đó là default. Những thành phần này chỉ có thể được truy cập bởi các class nằm trong cùng một package.
Phạm vi: Nội bộ Package.
Lưu ý: Nếu một class ở package khác kế thừa class này, nó vẫn không thể truy cập các thành phần default.
4. Protected: "Cha truyền con nối"
protected khá giống với default, nhưng nó có một "đặc quyền" dành cho sự kế thừa. Ngoài các class trong cùng package, các class con (subclass) ở package khác vẫn có thể truy cập được.
Phạm vi: Cùng package + Class con (kể cả khác package).
Khi nào dùng? Khi bạn muốn chia sẻ tài nguyên cho các lớp kế thừa nhưng vẫn muốn giấu chúng khỏi "thế giới bên ngoài".
Lời kết
Việc nắm vững các Access Modifiers không chỉ giúp code của bạn bảo mật hơn mà còn thể hiện tư duy thiết kế hệ thống tốt.
Quy tắc bàn tay sắt: Hãy luôn bắt đầu với private. Chỉ khi nào thực sự cần thiết mới mở rộng dần lên default, protected và cuối cùng là public.
Hy vọng bài viết này giúp bạn tự tin hơn khi thiết kế các class trong dự án của mình. Nếu thấy hữu ích, đừng quên nhấn Upvote và Clip bài viết này trên Viblo nhé!
All rights reserved