So Sánh Abstract Class Và Interface

     
Tổng quan

Interface cùng Abstract class là 2 tư tưởng cơ bản trong lập trình OOP. Tuy vậy phân khủng mọi người cảm thấy mơ hồ và lẫn lộn 2 có mang này. Vậy bọn chúng là gì, khác nhau như nào? vì sao dùng điều này Interface mà không phải Abstract và ngược lại ???

Is-a và Can-do

Bỏ qua toàn bộ những phần về kim chỉ nan của vấn đề tạo một abstract class với interface. Các bạn không cần thân thương nhiều tới việc abstract rất có thể khai báo đều gì, giỏi interface giành được phép khái niệm nội dung cách thức hay không. Điểm cơ phiên bản khi bạn được hỏi về sự khác biệt giữa bọn chúng là gì? Đó đó là mục đích mà chúng được sử dụng:

– Abstract class: là 1 class phụ vương cho tất cả các class tất cả cùng bạn dạng chất. Thực chất ở đây được gọi là kiểu, loại, trọng trách của class. Nhì class thuộc hiện thực một interface rất có thể hoàn toàn khác nhau về phiên bản chất. Hiểu dễ dàng như một thằng bé (child class) chỉ hoàn toàn có thể là con của một thằng cha, bao gồm tính biện 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 tính năng mà bạn có thể thêm và bất kỳ class nào. Từ chức năng ở đây không đồng nghĩa với cách làm (hoặc hàm). Interface có thể bao hàm nhiều hàm/phương thức và tất cả chúng cùng giao hàng cho một chức năng.

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

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

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

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

*

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

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

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

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

Xem thêm: Khử Mùi Hôi Nách Trên Áo Của Bạn Không Còn Là Ác Mộng Với Những Mẹo Này

Về công dụng của interface, xét ở tầm mức ứng dụng, những interface có thể được hiểu như những plugin hoặc thư viện/phần mềm third-party. Bài toán hiện thực một interface mang đến class cũng tương tự cài thêm plugin cho một trong những phần mềm vậy.

Bảng so sánh

Cuối cùng, cũng phải liệt kê những điểm khác biệt giữa hai khái niệm này để bạn cũng có thể sử dụng được khi đề xuất thiết. Các điểm khác biệt này hoàn toàn có thể khác nhau tùy vào ngữ điệu mà bạn sử dụng. Bởi vì vậy bạn chỉ việc nhớ những điểm căn bạn dạng sau:

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

Xem thêm: Cách Khôi Phục Lấy Lại Số Điện Thoại Trên Gmail, Điện Thoại 2021

Không đề nghị thiết.
Fields and ConstantsKhông
Tham khảo