Java tut 26 : Java Encapsulation ( Đóng gói ) 0 (0)
https://www.w3schools.com/java/java_encapsulation.asp
Ý 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:
privateprivate biếnBạ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 get và set công khai .
Các getphương pháp trả về giá trị biến, và các setbộ phương pháp 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:
public class Person { private String name; // private = restricted access // Getter public String getName() { return name; } // Setter public void setName(String newName) { this.name = newName; } } Các getphương thức trả về giá trị của biến name.
Các setphương pháp có một tham số ( newName) và gán nó vào namebiến. Các thistừ khóa được sử dụng để tham khảo các đối tượng hiện hành.
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:
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()và setName()để truy cập và cập nhật biến:
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" getphương thức) hoặc chỉ ghi (nếu bạn chỉ sử dụng setphương thức)Lượt xem : 237
This is excellent news!
Haven't seen the build yet, I'll look now.
Checking the build now