Cả hai kế thừa lớp và giao diện đều có vị trí của chúng. Kế thừa có nghĩa là "là một" trong khi một giao diện cung cấp một hợp đồng xác định cái gì đó "hành xử như thế nào".
Tôi muốn nói rằng sử dụng giao diện thường xuyên hơn không phải là một thực hành tồi. Tôi hiện đang đọc "C # hiệu quả - 50 cách cụ thể để cải thiện C # của bạn" của Bill Wagner. Mục số 22 nêu rõ và tôi trích dẫn: "Ưu tiên xác định và triển khai các giao diện để kế thừa".
Nói chung tôi sử dụng các lớp cơ sở khi tôi cần xác định một triển khai cụ thể của hành vi chung giữa các loại liên quan đến khái niệm. Tôi thường xuyên sử dụng giao diện hơn. Trên thực tế, tôi thường bắt đầu bằng cách xác định giao diện cho một lớp khi tôi bắt đầu tạo giao diện ... ngay cả khi cuối cùng tôi không biên dịch giao diện, tôi thấy rằng nó giúp bắt đầu bằng cách xác định API công khai của Lớp học từ đi. Nếu tôi thấy rằng tôi có nhiều lớp thực hiện giao diện và logic triển khai là giống hệt nhau, chỉ khi đó tôi mới tự hỏi liệu có nên thực hiện một lớp cơ sở chung giữa các loại hay không.
Một vài trích dẫn từ cuốn sách Bill Wagners ...
tất cả các lớp dẫn xuất ngay lập tức kết hợp hành vi đó. Việc thêm một thành viên vào một giao diện sẽ phá vỡ tất cả các lớp thực hiện giao diện đó. Chúng sẽ không chứa phương thức mới và sẽ không còn biên dịch nữa. Mỗi người triển khai phải cập nhật loại đó để bao gồm thành viên mới. Lựa chọn giữa một lớp cơ sở trừu tượng và một giao diện là một câu hỏi về cách tốt nhất để hỗ trợ sự trừu tượng của bạn theo thời gian. Các giao diện được cố định: Bạn phát hành một giao diện dưới dạng hợp đồng cho một bộ chức năng mà bất kỳ loại nào cũng có thể thực hiện. Các lớp cơ sở có thể được mở rộng theo thời gian. Những phần mở rộng đó trở thành một phần của mọi lớp dẫn xuất. Hai mô hình có thể được trộn lẫn để sử dụng lại mã thực thi trong khi hỗ trợ nhiều giao diện. " Chúng sẽ không chứa phương thức mới và sẽ không còn biên dịch nữa. Mỗi người triển khai phải cập nhật loại đó để bao gồm thành viên mới. Lựa chọn giữa một lớp cơ sở trừu tượng và một giao diện là một câu hỏi về cách tốt nhất để hỗ trợ sự trừu tượng của bạn theo thời gian. Các giao diện được cố định: Bạn phát hành một giao diện dưới dạng hợp đồng cho một bộ chức năng mà bất kỳ loại nào cũng có thể thực hiện. Các lớp cơ sở có thể được mở rộng theo thời gian. Những phần mở rộng đó trở thành một phần của mọi lớp dẫn xuất. Hai mô hình có thể được trộn lẫn để sử dụng lại mã thực thi trong khi hỗ trợ nhiều giao diện. " Chúng sẽ không chứa phương thức mới và sẽ không còn biên dịch nữa. Mỗi người triển khai phải cập nhật loại đó để bao gồm thành viên mới. Lựa chọn giữa một lớp cơ sở trừu tượng và một giao diện là một câu hỏi về cách tốt nhất để hỗ trợ sự trừu tượng của bạn theo thời gian. Các giao diện được cố định: Bạn phát hành một giao diện dưới dạng hợp đồng cho một bộ chức năng mà bất kỳ loại nào cũng có thể thực hiện. Các lớp cơ sở có thể được mở rộng theo thời gian. Những phần mở rộng đó trở thành một phần của mọi lớp dẫn xuất. Hai mô hình có thể được trộn lẫn để sử dụng lại mã thực thi trong khi hỗ trợ nhiều giao diện. " Bạn phát hành một giao diện dưới dạng hợp đồng cho một bộ chức năng mà bất kỳ loại nào cũng có thể thực hiện. Các lớp cơ sở có thể được mở rộng theo thời gian. Những phần mở rộng đó trở thành một phần của mọi lớp dẫn xuất. Hai mô hình có thể được trộn lẫn để sử dụng lại mã thực thi trong khi hỗ trợ nhiều giao diện. " Bạn phát hành một giao diện dưới dạng hợp đồng cho một bộ chức năng mà bất kỳ loại nào cũng có thể thực hiện. Các lớp cơ sở có thể được mở rộng theo thời gian. Những phần mở rộng đó trở thành một phần của mọi lớp dẫn xuất. Hai mô hình có thể được trộn lẫn để sử dụng lại mã thực thi trong khi hỗ trợ nhiều giao diện. "
"Giao diện mã hóa cung cấp tính linh hoạt cao hơn cho các nhà phát triển khác so với mã hóa cho các loại lớp cơ sở."
"Sử dụng các giao diện để xác định API cho một lớp cung cấp tính linh hoạt cao hơn."
"Khi kiểu của bạn hiển thị các thuộc tính dưới dạng các lớp, nó sẽ hiển thị toàn bộ giao diện cho lớp đó. Sử dụng các giao diện, bạn có thể chọn chỉ hiển thị các phương thức và thuộc tính bạn muốn khách hàng sử dụng."
"Các lớp cơ sở mô tả và thực hiện các hành vi phổ biến trên các loại bê tông liên quan. Các giao diện mô tả các phần chức năng nguyên tử mà các loại bê tông không liên quan có thể thực hiện. Cả hai đều có vị trí của chúng. Các lớp xác định các loại bạn tạo. Các giao diện mô tả hành vi của các loại đó là các phần chức năng. Nếu bạn hiểu được sự khác biệt, bạn sẽ tạo ra các thiết kế biểu cảm hơn, linh hoạt hơn khi đối mặt với sự thay đổi. Sử dụng hệ thống phân cấp lớp để xác định các loại liên quan.