Abstract class và interface đều được sử dụng để có được sự trừu tượng mà ở đó chúng ta có thể khai báo các phương thức trừu tượng. Nhưng có một vài sự khác nhau giữa abstract class và interface được liệt kê trong bảng sau: Show Abstract class Interface 1) Abstract class có phương thức abstract (không có thân hàm) và phương thức non-abstract (có thân hàm). Interface chỉ có phương thức abstract. Từ java 8, nó có thêm các phương thức default và static. 2) Abstract class không hỗ trợ đa kế thừa. Interface có hỗ trợ đa kế thừa 3) Abstract class có các biến final, non-final, static and non-static. Interface chỉ có các biến static và final. 4) Abstract class có thể cung cấp nội dung cài đặt cho phương thức của interface. Interface không thể cung cấp nội dung cài đặt cho phương thức của abstract class. 5) Từ khóa abstract được sử dụng để khai báo abstract class. Từ khóa interface được sử dụng để khai báo interface. 6) Ví dụ: public abstract class Shape { public abstract void draw(); } Ví dụ: public interface Drawable { void draw(); } Đơn giản để hiểu, đó là abstract class có được trừu tượng 1 phần (0 tới 100%), còn interface có được trừu tường toàn phần (100%). Ví dụ về abstract class và interface trong javaVí dụ sau là sự kết hợp giữa abstract class và interface. //tạo interface có 4 phương thức interface A { }
// tạo abstract class cung cấp cài đặt cho một phương thức của interface A
abstract class B implements A { }
// tạo subclass của abstract class B, cung cấp cài đặt cho các phương thức còn lại
class M extends B { }
// tạo lớp Test5 để gọi các phương thức của interface A
public class Test5 { }Output: I am a I am b I am C I am d Đây là một câu hỏi khá thú vị với vị trí junior java developer mà bất kì nhà tuyển dụng- NTD nào cũng đưa ra trong buổi phỏng vấn. Bài viết này, tôi sẽ giải thích chi tiết về sự khác nhau giữa hai khái niệm này. Sự khác nhau giữa Abstract Class và Interface trong Java?Abstract class và interface là một trong những phần core của ngôn ngữ lập trình Java và việc lựa chọn giữa asbtract class và interface trong thiết kế hệ thống là quyết đinh của một người - một team thiết kế hệ thống. Và sự khác biệt giữa abstract class và interface được liệt kê như sau:
Việc lựa chọn giữa abstract class và interface là một quyết định phụ thuộc vào nhiều yếu tố. Bạn hãy xem khi nào sử dụng asbtract class và khi nào sử dụng interface là giải pháp tốt nhất. Tôi xin đưa ra vài điều dưới đây:
Cách sử dụng hiệu quả nhất?Trong thực tế, việc sử dụng cả abstract class và interface là một phương pháp tiếp cận hiệu quả cho việc thiết kế hệ thống. Ví dụ như trong JDK, List là một interface có rất nhiều method, nhưng vẫn có song song một abstract class đó là AbstractList, nó cung cấp những skeletal implementation cho tất cả method của List interface, do đó, mọi subclass có thể extend class này và chỉ implement những method cần thiết. Chúng ta nên luôn luôn bắt đầu bằng một interface như một base và define những method mà mọi subclasses nên thực hiện và sau đó nếu có một số method mà chỉ subclass nhất định phải implement, chúng ta có thể extend base interfacec này với các method mới đó. Các subclasses sẽ có tùy chọn để lựa chọn giữa base interface hoặc child interface để thực hiện những yêu cầu của nó. Nếu số lượng method phát triển nên nhiều, ý tưởng mới là sử dụng một abstract class để cung cấp ra bộ skeletal để imlement các child interface và cung cấp sự linh hoạt cho các subclass lựa chọn giữa abstract class hoặc interface. Từ JDK 8 trở đi, bạn có thể có nhiều implement method trong nhiều interface. Tức là bạn có thể tạo ra mặc định như những static method trong những interface và cung cấp implementation cho chúng. Điều này sẽ thu hẹp khoảng cách giữa interface và abstract class, và bây giờ, interface là các thực hiện tốt nhất. Để biết thêm chi tiết về điểm thay đổi này trên JDK 8, bạn vui lòng đọc tài liệu JDK 8. Khi nào sử dụng abstract class và Interface?Khi nào thì sử dụng interface, khi nào sử dụng abstract class. Khi một nhóm đối tượng có cùng bản chất kế thừa từ một class thì sử dụng abstract class. Khi một nhóm đối tượng không có cùng bản chất nhưng chúng có hành động giống nhau thì sử dụng interface. Interface trong code là gì?Interface (hay giao diện) là một kiểu dữ liệu tham chiếu chỉ chứa hằng số và tên các phương thức, không có phần phương thức trừu tượng tương tự với class (lớp). Tuy nhiên, class thường thể hiện các thuộc tính và hành động của đối tượng, còn Interface thể hiện các hành động của lớp đó. Interface khác class như thế nào?Một Class như là một cái bản đồ chi tiết về các thuộc tính và phương thức của đối tượng. Còn Interface lại giống như mô tả tổng quan về đối tượng, bao gồm nhóm các thuộc tính và phương thức, nhưng không cung cấp việc triển khai cũng như khởi tạo cho nó. Trong C# abstract class và Interface có điểm chung là gì?Giống nhau: Abstract class và interface đều không thể khởi tạo đối tượng bên trong được. Abstract class và interface đều có thể khai báo các phương thức nhưng không thực hiện chúng. Abstract class và interface đều bao gồm các phương thức abstract. |