Trong Java, các biến riêng tư được hiển thị cho cả lớp. Chúng có thể được truy cập từ các phương thức tĩnh và từ các thể hiện khác của cùng một lớp.
Điều này, ví dụ, hữu ích trong các phương pháp nhà máy . Một phương thức xuất xưởng thường thực hiện khởi tạo cho một đối tượng phức tạp đến mức bạn không muốn để chúng vào mã ứng dụng. Để thực hiện khởi tạo, phương thức xuất xưởng thường cần quyền truy cập vào các phần bên trong lớp mà bạn không muốn phơi bày. Có thể truy cập các biến riêng tư trực tiếp làm cho cuộc sống của bạn dễ dàng hơn nhiều.
Tuy nhiên, khi bạn muốn ẩn chi tiết triển khai của một lớp ngay cả với các phương thức tĩnh hoặc từ các phiên bản khác của lớp đó, bạn có thể theo mẫu dữ liệu của lớp riêng . Đặt tất cả các biến riêng của một lớp vào một lớp bên trong riêng và ủy thác bất kỳ getters hoặc setters nào cho getters và setters của lớp bên trong đó.
Một tùy chọn khác là định nghĩa một giao diện cho lớp khai báo tất cả các phương thức chung của lớp và sau đó chỉ tham chiếu lớp dưới giao diện đó bất cứ khi nào có thể. Tham chiếu đến loại giao diện không thể được sử dụng để truy cập trực tiếp vào bất cứ thứ gì không được khai báo trong giao diện, bất kể ở đâu (ngoại trừ sự phản chiếu, tất nhiên). Khi bạn sử dụng ngôn ngữ lập trình hướng đối tượng không có giao diện (ví dụ như C ++), chúng có thể được mô phỏng với một lớp cơ sở trừu tượng được kế thừa bởi lớp thực tế.
interface ITest {
public int getA();
}
class Test implements ITest {
private int a = 5;
public int getA() { return a; } // implementation of method declared in interface
public static void main(){
ITest t = new Test();
t.a = 1; // syntax error: Interface ITest has no "a"
System.out.println(t.getA()); // calls Test.getA, visible because ITest declares it
}
}
equals
phải kiểm tra các trường riêng của một trường hợp khác. (Đăng dưới dạng nhận xét, vì đây là nội dung ngắn và không có gì về tính chất OOP của phương pháp này)