So sánh abstract class và interface

     
Tổng quan

Interface với Abstract class là 2 khái niệm cơ bạn dạng trong xây dựng OOP. Mà lại phân khủng mọi fan cảm thấy mơ hồ với lẫn lộn 2 định nghĩa này. Vậy bọn chúng là gì, khác biệt như nào? vì sao dùng điều này Interface mà chưa hẳn Abstract và trái lại ???

Is-a với Can-do

Bỏ qua tất cả những phần về lý thuyết của việc tạo một abstract class với interface. Bạn không cần thân yêu nhiều đến sự việc abstract có thể khai báo đều gì, tuyệt interface đạt được phép định nghĩa nội dung cách tiến hành hay không. Điểm cơ bạn dạng khi bạn được hỏi về sự khác biệt giữa chúng là gì? Đó đó là mục đích mà bọn chúng được sử dụng:

– Abstract class: là một trong class phụ vương cho tất cả các class bao gồm cùng bạn dạng chất. Bản chất ở trên đây được gọi là kiểu, loại, trách nhiệm của class. Nhị class cùng hiện thực một interface có thể hoàn toàn khác biệt về phiên bản chất. Hiểu dễ dàng và đơn giản như một thằng nhỏ (child class) chỉ hoàn toàn có thể là con của một thằng cha, tất cả tính phương pháp giống thân phụ (abstract class) nó.

Bạn đang xem: So sánh abstract class và interface

– Interface: là một công dụng mà bạn có thể thêm và bất kì class nào. Từ chức năng ở trên đây không đồng nghĩa với thủ tục (hoặc hàm). Interface gồm thể bao gồm nhiều hàm/phương thức và toàn bộ chúng cùng ship hàng cho một chức năng.

Vậy, bạn tránh việc nhầm lẫn khi nói đến việc một class được implement xuất xắc extend. Không ít người thường hay đồng bộ là không sáng tỏ hai từ bỏ này, nhưng bao gồm chúng vẫn nói lên sự khác biệt giữa interface với abstract class. Bạn chỉ có thể thừa kế (extend) từ một class và chỉ có thể hiện thực (implement) các tác dụng (interface) cho class của mình.Theo giải pháp ngắn gọn, quan hệ tình dục giữa một class khi thừa kế một abstract class được call là is-a, và một class khi lúc này một interface được gọi là can-do (hoặc –able).

Hãy xem ví dụ sau, tôi có:

Interface: Barkable, Runable, Flyable, Swimable.Abstract class Animal và những sub class: Bolt, AngryBird với Nemo.Abstract class Machine và những sub class: McQueen, Siddeley.
*

Như các bạn thấy, tuy nhiên cả McQueen và Bolt gần như được thực tại interface Runable, mà lại chúng trọn vẹn thuộc hai loại khác nhau. Và tất yếu một class hoàn toàn có thể can-do các thứ, ví dụ như Bolt hoàn toàn có thể chạy với sủa.

*

Dùng Interface như 1 “bản thiết kế” của class?Đây là một trong những điều thường xuyên được dùng để trả lời mang lại hai câu hỏi:

Interface được dùng để làm gì?Tại sao thiết yếu định nghĩa phần thân cho các phương thức của interface.

Xét ở một mức độ như thế nào đó vấn đề đó là đúng theo lý, cơ mà như đã nói tại đoạn trên, nó chỉ được dùng làm mô tả một bản thiết kế cho một tính năng của class. Nếu muốn tạo một bản thiết kế tổng thể, hãy sử dụng abstract class. Một phiên bản thiết kế toàn diện tất nhiên sẽ có được những thứ đã có dựng sẵn và gồm có thứ là abstract.

Một câu trả lời hoàn toàn có thể lý giải phần nào thắc mắc thứ hai là việc được cho phép định nghĩa thân phương thức trong số interface rất có thể khiến cho năng suất bị bớt sút. Tại sao là việc tìm và đào bới kiếm những phương thức đang diễn ra lâu hơn vì đề nghị duyệt qua các interface, cố gắng vì chỉ cần phải tìm kiếm trong class cha của nó.

Xem thêm: Cách Lấy Xương Cá Ra Khỏi Cổ Họng Hiệu Quả, Mẹo Chữa Hóc Xương Cá Tại Nhà Hiệu Quả

Về công dụng của interface, xét tại mức ứng dụng, những interface hoàn toàn có thể được gọi như các plugin hoặc thư viện/phần mượt third-party. Câu hỏi hiện thực một interface mang lại class cũng giống như cài thêm plugin cho một phần mềm vậy.

Bảng so sánh

Cuối cùng, cũng nên liệt kê những điểm khác biệt giữa hai có mang này để bạn có thể sử dụng được khi buộc phải thiết. Những điểm khác hoàn toàn này hoàn toàn có thể khác nhau tùy vào ngữ điệu mà chúng ta sử dụng. Vì chưng vậy bạn chỉ việc nhớ các điểm căn phiên bản sau:

InterfaceAbstract class
Multiple inheritanceMột class rất có thể hiện thực nhiều interface.(tạm xem như là thừa kế)Không cung ứng đa vượt kế
Default implementationKhông thể định nghĩa code xử lý, chỉ hoàn toàn có thể khai báo.Có thể định nghĩa thân phương thức, property.
Access ModifiersMọi phương thức, property đông đảo mặc định là public.Có thể xác định modifier.
Adding functionalityMọi phương thức, property của interface rất cần phải hiện thực trong class.

Xem thêm: Đề Thi Trạng Nguyên Tiếng Việt Lớp 4 Năm 2021, Trạng Nguyên Tiếng Việt Lớp 4

Không buộc phải thiết.
Fields và ConstantsKhông
Tham khảo