Có, chúng ta có thể khai báo constructor private. Nếu constructor là private, không thể tạo object của lớp từ bên ngoài. Dùng private constructor trong Singleton Design Pattern.
Điều kiện của Private Constructor
- Private constructor không cho phép lớp bị subclass (kế thừa).
- Private constructor không cho phép tạo object bên ngoài lớp.
- Nếu tất cả phương thức là hằng số (constant methods) → dùng private constructor.
- Nếu tất cả phương thức static → dùng private constructor.
- Nếu cố extends lớp có private constructor → lỗi compile-time.
Ví dụ: Singleton Pattern
class SingletonObject {
private SingletonObject() {
System.out.println("In a private constructor");
}
public static SingletonObject getObject() {
if (ref == null)
ref = new SingletonObject();
return ref;
}
private static SingletonObject ref;
}
public class PrivateConstructorDemo {
public static void main(String args[]) {
SingletonObject sObj = SingletonObject.getObject();
}
}
Kết quả đầu ra
In a private constructor
Các trường hợp dùng Private Constructor
| Trường hợp | Mô tả |
|---|---|
| Singleton | Đảm bảo chỉ 1 instance toàn ứng dụng |
| Utility Class | Chỉ chứa static method/field (java.lang.Math, Collections) |
| Factory Method | Kiểm soát tạo object qua static factory method |
| Builder Pattern | Constructor private, tạo qua Builder class |
| Constants-only class | Chỉ chứa hằng số, không cần instance |