Hướng dẫn Java

TRANG CHỦ Java Giới thiệu Java Java Bắt đầu Cú pháp Java Nhận xét Java Các biến Java Các kiểu dữ liệu Java Truyền kiểu Java Toán tử Java Chuỗi Java Toán Java Java Booleans Java Nếu ... Khác Chuyển đổi Java Java While Loop Java cho vòng lặp Ngắt / Tiếp tục Java Mảng Java

Phương thức Java

Phương thức Java Các tham số phương pháp Java Nạp chồng phương pháp Java Phạm vi Java Đệ quy Java

Các lớp Java

Java OOP Các lớp / đối tượng Java Thuộc tính lớp Java Phương thức lớp Java Trình tạo Java Các công cụ sửa đổi Java Đóng gói Java Gói / API Java Kế thừa Java Đa hình Java Các lớp bên trong Java Tóm tắt Java Giao diện Java Java Enums Đầu vào của người dùng Java Ngày Java Java ArrayList Java LinkedList Java HashMap Java HashSet Trình lặp lại Java Các lớp Java Wrapper Các trường hợp ngoại lệ của Java Java RegEx Chủ đề Java Java Lambda

Xử lý tệp Java

Tệp Java Java Tạo / Viết tệp Java đọc tệp Java Xóa tệp

Java Cách thực hiện

Thêm hai số

Tham khảo Java

Từ khóa Java Phương thức chuỗi Java Phương pháp toán học Java

Ví dụ về Java

Ví dụ về Java Trình biên dịch Java Bài tập Java Java Quiz Chứng chỉ Java


Đóng gói Java


Đóng gói

Ý nghĩa của Encapsulation là đảm bảo rằng dữ liệu "nhạy cảm" được ẩn khỏi người dùng. Để đạt được điều này, bạn phải:

  • khai báo các biến / thuộc tính lớp dưới dạng private
  • cung cấp các phương thức lấyđặt công khai để truy cập và cập nhật giá trị của một private biến

Nhận và đặt

Bạn đã học từ chương trước rằng privatecác biến chỉ có thể được truy cập trong cùng một lớp (một lớp bên ngoài không có quyền truy cập vào nó). Tuy nhiên, có thể truy cập chúng nếu chúng tôi cung cấp các phương thức lấyđặt công khai .

Phương getthức trả về giá trị biến và setphương thức đặt giá trị.

Cú pháp cho cả hai là chúng bắt đầu bằng gethoặc set, theo sau là tên của biến, với chữ cái đầu tiên viết hoa:

Thí dụ

public class Person {
  private String name; // private = restricted access

  // Getter
  public String getName() {
    return name;
  }

  // Setter
  public void setName(String newName) {
    this.name = newName;
  }
}

Giải thích ví dụ

Phương getthức trả về giá trị của biến name.

Phương setthức nhận một tham số ( newName) và gán nó cho namebiến. Từ thiskhóa được sử dụng để chỉ đối tượng hiện tại.

Tuy nhiên, vì namebiến được khai báo là private, chúng ta không thể truy cập nó từ bên ngoài lớp này:

Thí dụ

public class Main {
  public static void main(String[] args) {
    Person myObj = new Person();
    myObj.name = "John";  // error
    System.out.println(myObj.name); // error 
  }
}

Nếu biến được khai báo là public, chúng ta sẽ mong đợi kết quả sau:

John

Tuy nhiên, khi chúng tôi cố gắng truy cập một privatebiến, chúng tôi gặp lỗi:

MyClass.java:4: error: name has private access in Person
    myObj.name = "John";
         ^
MyClass.java:5: error: name has private access in Person
    System.out.println(myObj.name);
                  ^
2 errors

Thay vào đó, chúng tôi sử dụng các phương thức getName()setName()để truy cập và cập nhật biến:

Thí dụ

public class Main {
  public static void main(String[] args) {
    Person myObj = new Person();
    myObj.setName("John"); // Set the value of the name variable to "John"
    System.out.println(myObj.getName());
  }
}

// Outputs "John"


Tại sao lại đóng gói?

  • Kiểm soát tốt hơn các thuộc tính và phương thức của lớp
  • Các thuộc tính lớp có thể được đặt ở chế độ chỉ đọc (nếu bạn chỉ sử dụng getphương thức) hoặc chỉ ghi (nếu bạn chỉ sử dụng setphương thức)
  • Linh hoạt: lập trình viên có thể thay đổi một phần của mã mà không ảnh hưởng đến các phần khác
  • Tăng cường bảo mật dữ liệu