Kế thừa & Đa hình
extends, super, override, dynamic dispatch, abstract class vs interface, sealed class (Java 17+), và vì sao 'composition over inheritance' không phải khẩu hiệu rỗng.
Nội dung
Danh sách bài học
- 01~12 phút
Tư Duy Trừu Tượng Hóa: Trụ Cột Quan Trọng Nhất Của OOP
Hiểu bản chất trừu tượng hóa và ngữ nghĩa abstraction trong OOP, quy trình 5 bước mô hình hóa domain cùng các công cụ Java từ interface đến record.
- 02~13 phút
Nhận diện abstraction sai — over-engineering trap và cách sửa
Nhận diện 4 bẫy over-engineering kinh điển trong lập trình hướng đối tượng, áp dụng quy tắc Rule of 3 và YAGNI để thiết kế abstraction chuẩn xác.
- 03~12 phút
`extends` và `super` — kế thừa cơ bản
Cơ chế extends, constructor chain với super(...), đơn kế thừa trong Java, Object là gốc và thứ tự khởi tạo bộ nhớ từ cha xuống con.
- 04~12 phút
Override và dynamic dispatch — đa hình ở runtime
Cơ chế override method, phân biệt với overload, annotation @Override, dynamic dispatch với vtable trong JVM, covariant return type và các quy tắc Liskov.
- 05~12 phút
Abstract class — template buộc subclass hoàn thiện
Khi nào nên dùng abstract class, abstract method, template method pattern trong kiến trúc phần mềm, so sánh với interface và quy tắc quản lý state.
- 06~12 phút
Interface — hợp đồng capability với default method
Interface là gì, đa kế thừa interface, default method Java 8+, private method Java 9+, functional interface, và so sánh chi tiết với abstract class.
- 07~12 phút
Sealed class — kiểm soát tập subtype với pattern matching exhaustive
Sealed class/interface trong Java 17+, từ khóa permits, quy tắc final/sealed/non-sealed, và kỹ thuật kết hợp Record với Pattern Matching Switch.
- 08~12 phút
Composition over inheritance — khi nào KHÔNG kế thừa
Nguyên tắc Effective Java Item 18: ưu tiên composition hơn inheritance. Vấn đề của inheritance, cách composition sửa, pattern delegation, và khi nào thực sự cần extends.
- 09~25 phút
Mini-challenge: Thư viện đa phương tiện với sealed và record
Thực hành thiết kế hệ thống ấn phẩm thư viện đa phương tiện với sealed interface LibraryAsset, record cho từng ấn phẩm và switch pattern matching exhaustive.