Chuyển tới nội dung chính

Phân biệt Interface và Abstract class

1. Tổng quan

Điểm khác biệt cốt lõi cửa 2 thằng này đến từ tư tưởng sử dụng, ko phải đến từ việc thằng này có abc, thằng kia có xyz.

  • Interface giống như 1 bản hợp đồng (contract), tất cả các class implementation của nó phải tuân theo bản hợp đồng đấy. Vì sao lại là contract thì đọc tiếp bên dưới.
  • Abstract class là dùng để thừa kế, mối quan hệ cha-con. Tất cả các class con sẽ được thừa kế những gì của class cha

Nếu nhìn vào điểm khác nhau bạn có thể sẽ nghĩ là “2 thứ nó khác nhau rõ ràng như thế này, sao người ta lại đặt ra câu hỏi là phân biệt 2 thứ này nhỉ?”. Tuy nhiên trên thực tế, nhất là trong Java, về mặt functional thì Interface và Abstract class ko khác nhau nhiều. Sau khi bản update ở Java 8, thì Interface và Abstract class lại càng giống nhau hơn.

Nếu bạn so sánh 2 thằng này mà sa đà vào việc đếm thành phần như Interface thì tất cả method ko có nội dung hay Abstract thì có state thì bạn sẽ rơi vào vòng luẩn quẩn, học như thế rất mệt mỏi và sẽ rất rối.