Nội dung chính cần nắm
Khái niệm về Abstract Class
Abstract class là một lớp trừu tượng trong lập trình hướng đối tượng, được sử dụng làm lớp cơ sở và không thể tạo đối tượng trực tiếp từ lớp đó.
Lớp này có thể chứa cả abstract method (phương thức chỉ khai báo, không có thân) và concrete method (phương thức đã có phần xử lý). Khi một lớp kế thừa abstract class, nó phải override các abstract method để triển khai chi tiết.
Nhờ vậy, abstract class giúp:

Các đặc trưng của Abstract Class
Abstract class có một số đặc điểm quan trọng cần hiểu rõ khi thiết kế hệ thống hướng đối tượng:
-
Thường dùng làm lớp cơ sở: Abstract class đại diện cho một khái niệm chung trong hệ thống, ví dụ như Shape, Animal, PaymentMethod.

Cách Abstract Class hoạt động trong các ngôn ngữ lập trình
Abstract Class trong Java
Trong Java, abstract class được khai báo bằng từ khóa abstract và thường dùng làm lớp cha trong hệ thống kế thừa.
Một abstract class trong Java có thể:
Lớp con khi kế thừa phải triển khai toàn bộ phương thức trừu tượng. Nếu không, lớp con cũng phải được đánh dấu là abstract để tránh lỗi biên dịch.

Abstract Class trong PHP
Trong PHP, abstract class được khai báo bằng từ khóa abstract. Thông thường nó sẽ chứa ít nhất một abstract method để buộc các lớp con phải triển khai.
Abstract class trong PHP vẫn có thể:
Trong thực tế, abstract class thường được dùng cho các lớp cơ sở như:
Những lớp này giúp chuẩn hóa cấu trúc và cách hoạt động của hệ thống.
Abstract Class trong C#
Trong C#, abstract class cũng được khai báo bằng từ khóa abstract và không thể khởi tạo trực tiếp.
Abstract class trong C# có thể chứa:
C# không hỗ trợ đa kế thừa class, nhưng cho phép một abstract class khai báo virtual method để lớp con có thể override khi cần.

So sánh Abstract Class và Interface
Trong Java, abstract class và interface đều được dùng để trừu tượng hóa trong thiết kế hướng đối tượng. Tuy nhiên mục đích và cách sử dụng của chúng có sự khác biệt.
|
Tiêu chí |
Abstract Class |
Interface |
|
Cách khai báo |
abstract class |
interface |
|
Số lớp cha |
Chỉ kế thừa được 1 class |
Có thể implements nhiều interface |
|
Đa kế thừa |
Không hỗ trợ đa kế thừa class |
Hỗ trợ đa kế thừa hành vi |
|
Constructor |
Có thể có constructor |
Không có constructor |
|
Kiểu phương thức |
Có abstract và method có thân |
Có abstract, default, static, private method |
|
Field |
Có thể có field bình thường |
Tất cả field là public static final |
|
Access modifier |
public, protected, private |
Chủ yếu public |
|
Mức độ trừu tượng |
Không bắt buộc 100% trừu tượng |
Gần như hoàn toàn trừu tượng |
|
Kế thừa nội bộ |
Có thể extends class khác |
Có thể extends nhiều interface |
|
Quan hệ |
Có thể implements interface |
Interface chỉ được class implements |
Khi nào nên dùng Abstract Class và Interface
Trường hợp nên dùng Abstract Class
Abstract class phù hợp khi các lớp con có mối quan hệ chặt chẽ và cần chia sẻ trạng thái hoặc logic chung.
Một số tình huống phổ biến:
Trường hợp nên dùng Interface
Interface phù hợp khi cần định nghĩa một hợp đồng hành vi chung cho nhiều lớp, kể cả khi chúng không liên quan về mặt kế thừa.
Một số trường hợp điển hình: