Bài đăng nổi bật





Java Access Modifiers được sử dụng để kiểm soát quyền truy cập trong java. Java cung cấp kiểm soát truy cập thông qua ba từ khóa - private(riêng tư)protected (được bảo vệ) và public(công khai) . 
Mục lục  - 
Java Access Modifiers 
    • 1.1 Công cụ sửa đổi truy cập Java với class member 
    • 1.2 Công cụ sửa đổi truy cập Java - từ khóa public
    • 1.3 Công cụ sửa đổi truy cập Java - từ khóa private
    • 1.4 Công cụ sửa đổi truy cập Java - từ khóa protected
    • 1.5 Công cụ sửa đổi truy cập Java - truy cập default

Java Access Modifiers với Class

Chúng ta có tất cả bốn access modifiers cho các thành phần của class (member và method). Tuy nhiên,  đối với class thì chúng ta chỉ được sử dụng các từ khoá "public" hoặc là "default". 
sửa đổi truy cập java, được bảo vệ, riêng tư, công cộng
  1. Nếu một class là "public", thì chúng ta có thể truy cập nó từ bất cứ đâu, tức là từ bất kỳ lớp nào khác nằm trong bất kỳ gói nào khác, v.v.
  2. Chúng ta chỉ sử dụng khai báo "public" trong source file (tức là code), và mặc dù tên file Java có thể trùng với tên class nhưng ta sẽ không để từ khoá "public" trong tên file. 
  3. Nếu lớp không khai báo từ access modifilers nào đồng nghĩa với việc nó sử dụng default access, và do đó nó chỉ có thể được truy cập từ các class khác trong cùng một package. 

Java Access Modifiers với các Class Member

Chúng ta có thể có tất cả bốn công cụ sửa đổi truy cập cho các biến và phương thức thành viên lớp. Tuy nhiên, các quy tắc sửa đổi truy cập thành viên được áp dụng sau các quy tắc truy cập cấp lớp. Ví dụ, nếu một lớp có quyền truy cập mặc định thì nó sẽ không hiển thị trong các gói khác và do đó các phương thức và biến của lớp cũng sẽ không hiển thị.
Chúng ta sẽ xem xét từng cái một cách riêng biệt và sau đó chúng ta sẽ hiển thị việc sử dụng bộ sửa đổi truy cập java với một chương trình đơn giản.

Java Access Modifiers - public keyword

Nếu một thành viên của lớp (bao gồm variable và method) là "public", thì nó có thể được truy cập từ bất cứ đâuBiến thành viên hoặc phương thức được truy cập trên toàn cầu. Đây là cách đơn giản nhất để cung cấp quyền truy cập cho các thành viên trong lớp. Tuy nhiên, chúng ta nên quan tâm đến việc sử dụng từ khóa này với các biến lớp nếu không muốn ai cũng có thể thay đổi các giá trị. Thông thường, các biến lớp được giữ dưới dạng riêng tư và các phương thức getter-setter được cung cấp để làm việc với chúng.

Java Access Modifiers - private keyword

Nếu một thành viên trong lớp là private, thì chỉ có thể truy cập trong cùng một lớpĐây là quyền truy cập hạn chế nhất và thành viên lớp sẽ không nhìn thấy được với thế giới bên ngoài. Khi nào các bạn muốn các biến hoặc phương thức chỉ được truy cập từ bên trong class khi khi đó các bạn sử dụng từ khoá private cho khai báo biến và phương thức. 

Java Access Modifiers - protected keyword

Nếu thành viên của lớp được khai báo là protected, thì nó chỉ có thể truy cập được với các lớp trong cùng gói và các lớp con . Access modifiers này hạn ít hạn chế hơn so với private nhưng lại hạn chế nhiều hơn so với public.  Thông thường, chúng tôi sử dụng từ khóa này để đảm bảo các biến của lớp chỉ có thể truy cập được đối với các lớp con và các lớp khác cùng gói. 

Java Access Modifiers - default access 

Nếu một thành viên lớp không có bất kỳ access modifier nào được chỉ định, thì nó được xử lý với quyền truy cập mặc địnhCác quy tắc truy cập tương tự như các lớp và thành viên lớp có quyền truy cập mặc định sẽ chỉ có thể truy cập được vào các lớp trong cùng một gói. Quyền truy cập này bị hạn chế nhiều hơn public và protected nhưng ít bị hạn chế hơn private. 
(Khó truy cập nhất) private < default < protected < public (Dễ truy cập nhất)
Bảng dưới đây tóm tắt các access modifers ở trên đối với các lớp khác nhau trong cùng một gói hoặc các gói và lớp con khác.
sửa đổi truy cập java

Chúng ta hãy viết một số lớp đơn giản trong đó chúng ta sẽ thấy các access modifers hoạt động ra sao. 
CodeLeanA.java

package com.codelean.access;

class CodeLeanA {

 public void methodPublic(){
  methodPrivate();
 }
 
 protected void methodProtected(){
  methodPrivate();
 }
 
 void methodDefault(){
  methodPrivate();
 }
 
 private void methodPrivate(){}
}
Lưu ý rằng lớp CodeLeanA có quyền truy cập mặc định và các phương thức trong đó có đủ 4 loại access modifiers khác nhau (public, protected, default, priavate). 
CodeLeanB.java


package com.codelean.access;

import com.codelean.access.CodeLeanA;

public class CodeLeanB {

 public static void main(String args[]) {
  new CodeLeanA().methodPublic();
  new CodeLeanA().methodProtected();
  new CodeLeanA().methodDefault();

 }

 public void methodPublic() {

 }

 protected void methodProtected() {

 }

 void methodDefault() {

 }

 private void methodPrivate() {
 }

}

Lưu ý rằng CodeLeanB nằm trong cùng gói với lớp CodeLeanA và do đó nó có thể truy cập các thành viên của lớp CodeLeanA. Các thành phần private không thể truy cập nhưng tất cả các thành viên khác đều có thể truy cập được vì cùng một gói.
CodeLeanC.java


package com.codelean.access.child;

import com.codelean.access.CodeLeanB;

public class CodeLeanC {

 public static void main(String[] args) {
  new CodeLeanB().methodPublic();
 }

}

CodeLeanC không cùng gói với CodeLeanB và cũng không phải là class con của CodeLeanC, do đó nó chỉ có thể truy cập đến các phương thức là public. 
Bạn hãy thử cố gắng truy đến phương thức khác (ko phải là public) ==> bạn sẽ thấy thông báo lỗi ;) 
CodeLeanE.java


package com.codelean.util;

import com.codelean.access.CodeLeanB;

public class CodeLeanE extends CodeLeanB {

 public static void main(String[] args) {
  new CodeLeanB().methodPublic();
  new CodeLeanB().methodProtected(); // compile time error

  // works, accessing super class protected method using subclass
  new CodeLeanE().methodProtected();

 }

}

Vì lớp CodeLeanE là một lớp con của CodeLeanB, nên chúng ta có thể truy cập các thành viên protected của CodeLeanB thông qua lớp con CodeLeanE. Nếu chúng ta cố gắng truy cập trực tiếp vào phương thức được bảo vệ bởi từ khoá protected của lớp cha, chúng ta sẽ gặp lỗi khi biên dịch.
Đó là tất cả nững gì chúng ta cần nhớ về java access modifiers, thật đơn giản để hiểu. Lưu ý đừng nhầm lẫn với quyền truy cập mặc định default access với quyền được bảo vệ protected. 
Một cách dễ nhớ là default access bị hạn chế nhiều hơn protected và protected có thể truy cập được trong các lớp con.

Thần chú: để giúp các bạn dễ nhớ ý nghĩa của từ khóa ... tôi thường nói câu-thần-chú ;) sau :D  (hy vọng nó có thể giúp được bạn :D) 
- public: đâu cũng được
- private: chỉ trong class
- default: chỉ trong package 
- protected: mở rộng ra subclass

Post a Comment

أحدث أقدم