1/30
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai | Chat |
|---|
No analytics yet
Send a link to your students to track their progress
Abstract Class vs Interface (Khi nào dùng)
Abstract Class đại diện cho bản chất đối tượng (Is-A), dùng khi các lớp con chung chủng loại và cần chia sẻ code logic. Interface đại diện cho khả năng/bản hợp đồng hành vi (Can-Do), dùng cho các lớp không liên quan nhưng chung hành vi để tạo Loose Coupling. Một Class chỉ kế thừa được 1 Abstract Class nhưng implement được nhiều Interface.
Abstract class có thể lưu giữ trạng thái, có kế thừa thuộc tính còn interface thì ko
Overloading vs Overriding (Thời điểm xảy ra)
Overloading (Nạp chồng) là các hàm cùng tên khác tham số trong cùng một Class, quyết định ở Compile-time (Static Binding). Overriding (Ghi đè) là lớp con viết lại hàm của lớp cha (cùng tên, tham số, kiểu trả về), được quyết định ở Runtime (Dynamic Binding) và là biểu hiện rõ nhất của tính Đa hình.
Composition hơn Inheritance (Tại sao ưu tiên)
Inheritance tạo liên kết quá chặt chẽ (Tight Coupling), dễ lỗi dây chuyền (Fragile Base Class) và phơi bày chi tiết lớp cha. Composition tạo mối quan hệ lỏng lẻo (Has-A) bằng cách nhét đối tượng làm thuộc tính, giúp code linh hoạt, dễ tráo đổi cấu phần ở Runtime và dễ viết Unit Test (Mocking).
Diamond Problem
Lỗi xảy ra trong đa kế thừa khi lớp D kế thừa từ cả B và C, mà B và C lại cùng kế thừa và ghi đè một hàm của lớp A. Khi D gọi hàm đó, máy tính không biết chọn logic của B hay C. Java/C# giải quyết bằng cách cấm đa kế thừa class, chỉ cho đa kế thừa Interface.
Lạm dụng Getter/Setter vô tội vạ
Hành vi vi phạm tính đóng gói (Encapsulation) bằng cách biến thuộc tính private thành một dạng "global variable trá hình", ai cũng truy cập được, phơi bày cấu trúc bên trong và vi phạm quy tắc "Tell, Don't Ask". Đúng chuẩn là phải viết hàm nghiệp vụ ngay trong Class để nó tự xử lý dữ liệu của chính nó.
Từ khóa Static và tính Đa hình
Static định nghĩa thuộc tính/phương thức thuộc về cấp độ Lớp (Class) chứ không phải thực thể (Instance). Hàm static KHÔNG THỂ bị Override (ghi đè) vì nó sử dụng static binding ở compile-time; nếu viết trùng tên ở lớp con thì đó là Method Hiding (Ẩn hàm) chứ không phải Đa hình.
Immutable Object (Cách tạo và Ứng dụng)
Đối tượng không thể bị thay đổi trạng thái dữ liệu sau khi khởi tạo a(như String). Cách tạo: class final, thuộc tính private final, không viết Setter, gán qua Constructor. Ứng dụng thực tế lớn nhất là đảm bảo an toàn đa luồng (Thread-safe) mà không cần dùng cơ chế khóa (Lock) phức tạp.
Open/Closed Principle ứng dụng qua Đa hình
Nguyên lý yêu cầu hệ thống đóng với việc sửa đổi code cũ nhưng mở với việc mở rộng tính năng mới. Tính đa hình thực hiện điều này bằng cách cho class chính tương tác qua Interface; khi có chức năng mới, chỉ cần tạo Class mới thực thi Interface đó mà không cần sửa code cũ đang chạy ổn định.
Upcasting vs Downcasting (Nguy cơ)
Upcasting là chuyển kiểu từ con lên cha (tự động, luôn an toàn). Downcasting là ép kiểu ngược từ cha xuống con (thủ công, không an toàn). Nguy cơ lớn nhất của Downcasting là gây sập ứng dụng lúc runtime (ClassCastException) nếu vùng nhớ không đúng kiểu, cần dùng từ khóa kiểm tra (instanceof, is/as) trước khi ép.