Đóng gói Java

Trong hướng dẫn này, bạn sẽ tìm hiểu về cách đóng gói và ẩn dữ liệu trong Java với sự trợ giúp của các ví dụ.

Đóng gói Java

Tính đóng gói là một trong những tính năng chính của lập trình hướng đối tượng. Tính đóng gói đề cập đến việc đóng gói các trường và phương thức bên trong một lớp duy nhất.

Nó ngăn các lớp bên ngoài truy cập và thay đổi các trường và phương thức của một lớp. Điều này cũng giúp đạt được việc ẩn dữ liệu .

Ví dụ 1: Đóng gói Java

class Area {

  // fields to calculate area
  int length;
  int breadth;

  // constructor to initialize values
  Area(int length, int breadth) {
    this.length = length;
    this.breadth = breadth;
  }

  // method to calculate area
  public void getArea() {
    int area = length * breadth;
    System.out.println("Area: " + area);
  }
}

class Main {
  public static void main(String[] args) {

    // create object of Area
    // pass value of length and breadth
    Area rectangle = new Area(5, 6);
    rectangle.getArea();
  }
}

Đầu ra

Area: 30

Trong ví dụ trên, chúng ta đã tạo một lớp có tên là Khu vực . Mục đích chính của lớp này là để tính diện tích.

Để tính toán diện tích, chúng ta cần hai biến: chiều dài và bề rộng và một phương pháp: getArea(). Do đó, chúng tôi đã gộp các trường và phương thức này vào bên trong một lớp duy nhất.

Tại đây, các trường và phương thức cũng có thể được truy cập từ các lớp khác. Do đó, đây không phải là ẩn dữ liệu .

Đây chỉ là sự đóng gói . Chúng tôi chỉ đang giữ các mã tương tự với nhau.

Lưu ý : Mọi người thường coi đóng gói là ẩn dữ liệu, nhưng điều đó không hoàn toàn đúng.

Đóng gói đề cập đến việc đóng gói các trường và phương thức liên quan lại với nhau. Điều này có thể được sử dụng để đạt được ẩn dữ liệu. Bản thân việc đóng gói không phải là ẩn dữ liệu.

Tại sao đóng gói?

  • In Java, encapsulation helps us to keep related fields and methods together, which makes our code cleaner and easy to read.
  • It helps to control the values of our data fields. For example,class Person { private int age; public void setAge(int age) { if (age >= 0) { this.age = age; } } }
    Here, we are making the age variable private and applying logic inside the setAge() method. Now, age cannot be negative.
  • The getter and setter methods provide read-only or write-only access to our class fields. For example,getName() // provides read-only access setName() // provides write-only access
  • It helps to decouple components of a system. For example, we can encapsulate code into multiple bundles.

    These decoupled components (bundle) can be developed, tested, and debugged independently and concurrently. And, any changes in a particular component do not have any effect on other components.
  • We can also achieve data hiding using encapsulation. In the above example, if we change the length and breadth variable into private, then the access to these fields is restricted.

    And, they are kept hidden from outer classes. This is called data hiding.

Ẩn dữ liệu

Ẩn dữ liệu là một cách hạn chế quyền truy cập của các thành viên dữ liệu của chúng tôi bằng cách ẩn các chi tiết triển khai. Đóng gói cũng cung cấp một cách để ẩn dữ liệu.

Chúng ta có thể sử dụng công cụ sửa đổi quyền truy cập để ẩn dữ liệu. Ví dụ,

Ví dụ 2: Ẩn dữ liệu bằng cách sử dụng công cụ xác định riêng tư

class Person {

  // private field
  private int age;

  // getter method
  public int getAge() {
    return age;
  }

  // setter method
  public void setAge(int age) {
    this.age = age;
  }
}

class Main {
  public static void main(String[] args) {

    // create an object of Person
    Person p1 = new Person();

    // change age using setter
    p1.setAge(24);

    // access age using getter
    System.out.println("My age is " + p1.getAge());
  }
}

Đầu ra

My age is 24

Trong ví dụ trên, chúng ta có tuổiprivate trường . Vì nó là , nó không thể được truy cập từ bên ngoài lớp.private

Để truy cập tuổi , chúng tôi đã sử dụng publiccác phương pháp: getAge()và setAge(). Các phương thức này được gọi là phương thức getter và setter.

Đặt độ tuổi ở chế độ riêng tư cho phép chúng tôi hạn chế truy cập trái phép từ bên ngoài lớp học. Đây là ẩn dữ liệu .

Nếu chúng tôi cố gắng truy cập trường tuổi từ lớp Chính , chúng tôi sẽ gặp lỗi.

// error: age has private access in Person
p1.age = 24;








Gõ tìm kiếm nhanh...