Trong Java, từ khóa “protected” là một trong các giới hạn truy cập (access modifiers) của một thành phần (field, method, constructor) của một class.
Nếu một thành phần được đánh dấu là “protected”, nó sẽ có truy cập được giới hạn trong class hiện tại và các class kế thừa nó. Nó cũng có thể truy cập từ bất kỳ class nào trong cùng một package với class hiện tại.
Các bài viết liên quan:
Giới thiệu về protected
Trong ngôn ngữ lập trình Java, từ khóa protected
là một từ khóa truy cập (access modifier) được sử dụng để khai báo phạm vi truy cập cho các thành viên (biến và phương thức) của một lớp. Phạm vi protected
cho phép các thành viên được truy cập từ các lớp con (subclass) và các lớp cùng gói (package).
Khi một thành viên của một lớp được khai báo với từ khóa protected
, nó chỉ có thể được truy cập từ các đối tượng của lớp con (subclass) hoặc từ các lớp cùng gói (package). Truy cập từ các lớp khác nằm ngoài gói hoặc không phải là lớp con sẽ không được phép.
Đây là cú pháp sử dụng từ khóa protected
trong Java:
protected <kiểu dữ liệu> <tên thành viên>;
Ví dụ, dưới đây là một lớp Person
có một thuộc tính name
được khai báo là protected
:
public class Person { protected String name; // Constructors, methods, etc. }
Trong ví dụ trên, thuộc tính name
được khai báo là protected
, cho phép các lớp con và các lớp cùng gói truy cập và sử dụng nó.
Xem thêm Thừa kế(Inheritance) trong Dart
Từ khóa protected
có ý nghĩa quan trọng trong việc triển khai kỹ thuật kế thừa (inheritance) và đa hình (polymorphism). Nó cho phép các lớp con kế thừa và sử dụng các thành viên được bảo vệ từ lớp cha mà không cần phải thông qua các phương thức truy cập (getter/setter).
Ví dụ:
class A { protected int x = 1; protected void printX() { System.out.println(x); } } class B extends A { public void printXFromB() { printX(); // có thể truy cập vì class B kế thừa từ class A } } class C { public void printXFromC(A a) { // a.x = 2; // không thể truy cập vì class C không kế thừa từ class A a.printX(); // có thể truy cập vì được truyền vào một đối tượng của class A } }
Trong ví dụ trên, thành phần x và printX của class A được đánh dấu là protected, nên chỉ có class B kế thừa từ class A mới có thể truy cập được thành phần đó. Tuy nhiên, class C có thể truy cập phương thức printX khi truyền vào đối tượng của class A.
Cảnh báo: Từ khóa protected không nên được sử dụng thường xuyên, nên chọn từ khóa public nếu có thể. Nếu bạn muốn giới hạn truy cập cho một thành phần, nên sử dụng từ khóa private. Từ khóa protected có thể dẫn đến những vấn đề về bảo mật và việc quản lý code trong tương lai.
Ý nghĩa và cách sử dụng protected
Ý nghĩa của từ khóa protected
trong Java là cho phép truy cập và sử dụng các thành viên (biến và phương thức) từ lớp con (subclass) và các lớp cùng gói (package). Nó cung cấp một mức truy cập trung bình giữa public
và private
, giúp kiểm soát phạm vi truy cập của các thành viên trong một lớp.
Cách sử dụng từ khóa protected
trong Java như sau:
- Định nghĩa thành viên
protected
: Để khai báo một thành viên của lớp (biến hoặc phương thức) làprotected
, hãy đặt từ khóaprotected
trước khai báo của thành viên đó.
protected <kiểu dữ liệu> <tên thành viên>;
- Truy cập thành viên
protected
: Truy cập các thành viênprotected
có thể được thực hiện từ các lớp con (subclass) bằng cách sử dụng tên của đối tượng con hoặc thông qua thừa kế.
TênLớpCon tênĐốiTượng = new TênLớpCon(); tênĐốiTượng.<thành viên protected>;
- Truy cập thành viên
protected
từ cùng gói (package): Các lớp trong cùng gói cũng có thể truy cập và sử dụng các thành viênprotected
mà không cần thừa kế.
<tên thành viên protected>;
- Kế thừa và sử dụng thành viên
protected
: Các lớp con có thể kế thừa và sử dụng các thành viênprotected
từ lớp cha mà không cần phải sử dụng các phương thức truy cập (getter/setter).
public class LớpCon extends LớpCha { // ... public void phươngThức() { // Sử dụng thành viên protected <tên thành viên protected>; } // ... }
Lợi ích của protected
là nó cho phép kế thừa và sử dụng các thành viên từ lớp cha một cách tiện lợi và bảo mật. Nó cũng giúp hạn chế phạm vi truy cập, ngăn chặn việc truy cập trực tiếp vào các thành viên từ các lớp không liên quan hoặc không cần thiết. Tuy nhiên, việc sử dụng protected
cần được thực hiện một cách cẩn thận và xem xét kỹ về việc chia sẻ thông tin và bảo mật trong kiến trúc của ứng dụng.
Xem thêm Java JViewport
Một vài ví dụ sử dụng protected trong java
Ví dụ 1:
class Parent { protected int x; protected void setX(int value) { x = value; } } class Child extends Parent { void test() { setX(5); // Được phép truy cập vì là lớp con của Parent System.out.println(x); // Được phép truy cập vì là lớp con của Parent } }
Ví dụ 2:
class A { protected int x; } class B extends A { void test() { x = 5; // Được phép truy cập vì là lớp con của A } } class C { void test() { A a = new A(); a.x = 5; // Không được phép truy cập vì là lớp khác package với A } }
Ví dụ 3:
class Parent { protected int x; } class Child extends Parent { void test() { x = 5; // Được phép truy cập vì là lớp con của Parent } } class Main { void test() { Parent parent = new Parent(); parent.x = 5; // Không được phép truy cập vì là đối tượng Parent } }
Trong các ví dụ trên thuộc tính x và phương thức setX được khai báo là protected và chỉ có thể truy cập từ các lớp con hoặc từ cùng package với nó.
Xem thêm kế thừa trong c++