Thông thường, nếu 2 class có những điểm chung về code thì ta sẽ viết các điểm chung đó vào class cha và viết điểm riêng vào 2 class con.
Giả sử cả 3 Implementation ở ví dụ trên đều có phần code method sound()
là giống nhau, thì tốt nhất là ta nên chuyển method sound
lên Abstract class.
sound()
và display()
, nhưng nó lại ko muốn implement method display()
vì đây là phần riêng của mỗi implementation nên ở nó sẽ đánh dấu method này là abstract,
những class con phải tự override.abstract
chỗ class để client ko thể khởi tạo nhầm.Bạn có thể sẽ nhìn thấy cái pattern này ở trong nhiều thư viện khác nhau và giờ chắc bạn đã hiểu vì sao ở các thư viện, nó cho phép mình viết custom implementation thì người ta thường hướng dẫn bạn nên extend từ Abstract class thay vì implement trực tiếp từ Interface.
Nếu bạn vẫn chưa hiểu vì sao thì đây là câu trả lời: