Encapsulation — Inheritance — Polymorphism — Abstraction.
- Encapsulation (Đóng gói): gom dữ liệu + method thao tác vào cùng class; kiểm soát truy cập qua
private/protected, chỉ lộ ra method nghiệp vụ. Ví dụ repo pattern: phần còn lại của hệ thống gọiuser.getName()chứ không đụng trực tiếp fieldname.
- Inheritance (Kế thừa): class con
extendsclass cha (Java chỉ kế thừa single class), dùng lại field + method.Dog extends Animal→ có sẵnname,eat(). Lưu ý: inheritance tạo coupling chặt. Nếu mục đích chỉ là dùng lại hành vi, composition thường là lựa chọn linh hoạt hơn.
- Polymorphism (Đa hình): cùng interface/khái niệm, nhiều hành vi khác nhau. Compile-time polymorphism = method overloading (nhiều phiên bản method tên giống, khác tham số). Runtime polymorphism = method overriding — JVM quyết định gọi bản nào dựa trên object thực tế chạy lúc runtime:
java
Animal a = new Dog();
a.speak(); // gọi Dog.speak(), không phải Animal.speak()- Abstraction (Trừu tượng): lộ "làm được gì", giấu "làm thế nào". Hiện thực bằng abstract class hoặc interface. Tài xế quay vô-lăng là đủ — không cần hiểu cơ chế hộp số.
Bốn tính chất bổ trợ nhau: Abstraction đặt contract → Encapsulation giấu chi tiết → Inheritance tái sử dụng → Polymorphism hoán đổi implementation. Giảm coupling, dễ test, dễ thay đổi.
Lưu ý: Trong Java có 4 pillar. Một số ngôn ngữ/khái niệm OOP khác liệt kê 5 (thêm Composition hoặc Message Passing), nhưng khi phỏng vấn Java thì 4 là câu trả lời chuẩn.