Trong lập trình hướng đối tượng, sự khác biệt cốt lõi giữa Abstract Class và Interface là gì và tiêu chí nào để Junior lựa chọn trong dự án Enterprise?
Bản chất vấn đề
- Abstract Class: Đại diện cho quan hệ 'Is-A', cho phép chia sẻ mã nguồn chung (state thông qua các biến instance và logic thông qua các phương thức có sẵn). Một lớp chỉ có thể kế thừa một Abstract Class.
- Interface: Đại diện cho hợp đồng hành vi 'Can-Do', định nghĩa các phương thức mà lớp cài đặt bắt buộc phải có. Từ Java 8 trở lên, Interface hỗ trợ phương thức mặc định (default methods). Một lớp có thể cài đặt nhiều Interface.
Tiêu chí lựa chọn
- Sử dụng Abstract Class khi:
- Cần chia sẻ mã nguồn, trạng thái (fields) chung giữa các lớp có họ hàng gần.
- Cần kiểm soát quyền truy cập (protected, private modifiers) đối với các thành viên bên trong.
- Sử dụng Interface khi:
- Cần định nghĩa các hành vi chung cho các lớp không có quan hệ họ hàng.
- Áp dụng đa kế thừa hành vi (Multiple Inheritance of Type) trong thiết kế.
Lưu ý thực chiến
Junior thường dùng Abstract Class quá mức cần thiết. Hãy ưu tiên dùng Interface để giữ cho thiết kế lỏng lẻo (Loose Coupling) và dễ dàng viết Unit Test với Mock Objects.
Làm Chủ Phỏng Vấn & Nâng Cao Trình Độ Chuyên Nghiệp
Hệ thống khóa học thực chiến chuẩn Enterprise giúp bạn tự tin chinh phục mọi kỳ phỏng vấn kỹ thuật và thăng tiến thu nhập.
Tải Tuyển Tập 100+ Câu Hỏi Phỏng Vấn Chuyên Sâu (PDF)
Bộ tài liệu chuẩn Senior do Unicode Academy tuyển chọn & biên soạn, hỗ trợ tải về định dạng PDF chuẩn in ấn.
Cần Mentor Phỏng Vấn Thử 1-1 & Tối Ưu CV?
Mô phỏng phỏng vấn kỹ thuật thực tế 1-1 qua Google Meet, nhận xét chi tiết điểm mạnh/yếu và sửa CV trực tiếp cùng giảng viên Unicode.
Kiểm Tra CV Chuẩn ATS Miễn Phí
Tải CV của bạn lên để hệ thống AI rà soát từ khóa kỹ năng, định dạng và tính điểm chuẩn nhà tuyển dụng.
Câu hỏi oop liên quan cùng chủ đề
- Làm thế nào để tối ưu hóa hiệu năng và quản lý Encapsulation trong dự án OOP? Entry
- Làm thế nào để tối ưu hóa hiệu năng và quản lý Design Patterns trong dự án OOP? Entry
- Hãy giải thích chi tiết cơ chế hoạt động của Inheritance trong lập trình OOP. Junior
- Hãy giải thích chi tiết cơ chế hoạt động của Composition vs Inheritance trong lập trình OOP. Junior
- Trong lập trình hướng đối tượng, tại sao việc khởi tạo quá nhiều thuộc tính trong constructor lại là một dấu hiệu xấu về thiết kế (Anti-pattern) và cách khắc phục như thế nào? Junior


