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:

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 publicprivate, 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:

  1. Đị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óa protected trước khai báo của thành viên đó.
protected <kiểu dữ liệu> <tên thành viên>;
  1. Truy cập thành viên protected: Truy cập các thành viên protected 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>;
  1. 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ên protected mà không cần thừa kế.
<tên thành viên protected>;
  1. 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ên protected 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++

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