Rate this post

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:

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.

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ó.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now