So sánh sự khác nhau giữa Interface và Abstract trong lập trình hướng đối tượng

  1. Tổng quan: InterfaceAbstract Class là những khái niệm cơ bản trong lập trình OOP, nhưng khi mới tiếp xúc với OOP thì mọi người thường có sự so sánh cũng như khó hiểu, nhầm lẫn về 2 khái niệm này. Vì vậy hôm nay mình sẽ viết bài viết so sánh về Interface và Abstract Class. Bây giờ chúng ta lên đường…
  2. Định nghĩa:
    • Interface: là một giao diện thiết kế của một lớp. Nó chỉ có các phương thức trừu tượng. Interface là một kỹ thuật để thu được tình trừu tượng hoàn toàn và đa kế thừa trong Java. Interface trong Java cũng biễu diễn mối quan hệ IS-A. Nó không thể được khởi tạo giống như lớp trừu tượng. Interface mặc định có access modifier là public.
    • Abstract Class: Một lớp được khai báo là abstract thì đó là lớp trừu tượng. Nó cần được kế thừa và phương thức của nó được triển khai. Nó không thể được khởi tạo. Có thể xác định access modifier.
  3. So sánh sự khác nhau:
    Đặc điểm Lớp trừu tượng Interface
    Phương thức abstract Lớp trừu tượng có thể có các phương thức abstract và non-abstract Interface chỉ có thể có phương thức abstract
    Đa kế thừa Lớp trừu tượng không hỗ trợ đa kế thừa Interface hỗ trợ đa kế thừa
    Khai báo biến Lớp trừu tượng có thể có các biến final, non-final, static và non-static Interface chỉ có các biến static và final
    Khai báo phương thức Lớp trừu tượng có thể có phương thức static, phương thức main và constructor Interface không thể có phương thức static, main hoặc constructor.
    Từ khóa khai báo Từ khóa abstract được sử dụng để khai báo lớp trừu tượng Từ khóa interface được sử dụng để khai báo Interface
    Triển khai Interface Lớp trừu tượng có thể cung cấp trình triển khai của Interface Interface không cung cấp trình triển khai cụ thể của lớp abstract
    Access Modifier Mọi phương thức, property đều mặc định là public. Có thể xác định modifier.
  4. Nhận định:
    • Abstract class: là một class cha cho tất cả các class có cùng bản chất. Bản chất ở đây được hiểu là kiểu, loại, nhiệm vụ của class. Hai class cùng hiện thực một interface có thể hoàn toàn khác nhau về bản chất.
    • Interface: là một chức 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 phương thức (hoặc hàm). Interface có thể bao gồm nhiều hàm/phương thức và tất cả chúng cùng phục vụ 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 hay extend. Nhiều người thường hay đồng nhất là không phân biệt hai từ này, nhưng chính chúng đã nói lên sự khác biệt giữa interface và 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 chức năng (interface) cho class của mình.
    • Theo cách ngắn gọn, quan hệ giữa một class khi thừa kế một abstract class được gọi là is-a, và một class khi hiện thực một interface được gọi là can-do (hoặc –able).
  5. Ví dụ minh họa:
    • Các bạn có thểm tham khảo thêm ví dụ minh họa ở blog: YinYangIT . Ví dụ được đưa ra có hình ảnh mia họa cụ thể đọc rất dễ hiểu.

Via YingYangIT

Advertisements