Access Modifiers trong java với ví dụ cụ thể

Ở bài tính đóng gói mình đã có giới thiệu sơ qua từ khoá private và public trong java. Những từ khoá đó được gọi là access modifier ngoài public, private, chúng ta còn có thêm từ khoá protected. Access modifier sẽ hạn chế quyền truy cập của các biến, method, constructor của class, nếu những thành phần này không có từ khoá access modifier đi trước thì mặc định được hiểu là default.

Để hiểu được bài này, chúng ta cần có kiến thức về package trong java. Vì ở phần này mình sẽ lấy khá nhiều ví dụ sử dụng package để hiểu rõ hơn về access modifier.

Sau cùng chúng ta sẽ có 4 access modifier:

  • default
  • private
  • protected
  • public

Cú pháp sử dụng access modifier

Ví dụ 1: Access modifier độc lập

// Biến
<Access modifier> <Kiểu dữ liệu> <Tên biến>;
private int number;

// method
<Access modifier> <Kiểu trả về> <tên hàm>(param){// body};
protected void demo() {}

// constructor
<Access modifier> <Tên constructor>(param){// body};
public Example() {}

Ví dụ 2: Access modifier với từ khoá static

Khi đi với từ khoá static, access modifier luôn đứng trước static. Static không được phép khai báo tại constructor. Nếu một method đi với từ khoá static, nó chỉ được sử dụng các biến static của class.

// Biến
<Access modifier> static <Kiểu dữ liệu> <Tên biến>;
private static int number;

// method
<Access modifier> static <Kiểu trả về> <tên hàm>(param){// body};
protected static void demo() {}

Flow access modifier

Key

Class

Package

Subclass

World

public

OK

OK

OK

OK

protected

OK

OK

OK

KO

default OK

OK

KO

KO

private

OK

KO

KO

KO

Bảng trên là bảng tóm tắt cho phép truy cập đối với từng keyword trong access modifier. Ví dụ đối những thành phần đi với từ khoá public thì có thể truy cập được ở trong cùng class, hoặc khác package, class con, hoặc bất cứ đâu. Private chỉ có thể truy cập được trong nội bộ class.

Default access modifier trong java

Khi chúng ta không thêm một trong 3 từ khoá private, protected, public vào trước các biến, method, constructor thì mặc định nó được hiểu là default access modifier

Ví dụ: chúng ta sẽ có 2 package abcpackage xyzpackage

package abcpackage;
// File Operator.java
public class Operator {
  int sum(int a, int b){
	return a+b;
  }
}
package xyzpackage;
// File Main.java
import abcpackage.*;
public class Main {
   public static void main(String args[]){
	Addition obj = new Addition();
        obj.sum(10, 21);
   }
}

Output

Error:(9, 17) java: sum(int,int) is not public in acbpackage.Operator; cannot be accessed from outside package

Method sum() đi với default access modifier nên nó sẽ không được truy cập từ các class khác package.

Private access modifier trong java

Các thành phần dữ liệu chỉ được truy cập trong nội bộ class chứa nó.

// File Deno.java
package acbpackage;

public class Demo {
    private int number = 19;

    void display() {
        System.out.println(number);
    }
}
// File Main.java
package acbpackage;

public class Main {

    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.display();
    }
}

Output: 19

Protected access modifier trong java

Trong java protected access modifier được sử dụng nhiều trong quan hệ thừa kế, các thành phần protected của class cha được chỉ định cho các class con của nó có thể sử dụng. Ngoài ra các thành phần protected cũng có thể được truy cập từ trong nội bộ class, các class cùng package.

Ví dụ

package abcpackage;
// File Operator.java
public class Operator {
  protected int sum(int a, int b){
	return a+b;
  }
}
// File SubClass.java
package acbpackage;

public class SubClass extends Operator {
    void display() {
        System.out.println(super.sum(12, 13));
    }
}
// File Main.java
package acbpackage;

public class Main {

    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        subClass.display();
    }
}

Output: 25

Public access modifier

Các thành phần public trong java có thể sử dụng ở bất cứ đâu trong chưong trình

package abcpackage;
// File Operator.java
public class Operator {
  public int sum(int a, int b){
	return a+b;
  }
}
// File Main.java
package acbpackage;

public class Main {

    public static void main(String[] args) {
        Operator obj = new Operator();
        System.out.println(obj.sum(12, 13));
    }
}

Nguồn tham khảo

https://www.geeksforgeeks.org/access-modifiers-java/

https://www.javatpoint.com/access-modifiers

4 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x