Lớp trừu tượng (abstract class) |
Interface |
Thể hiện tính trừu tượng < 100% |
Thể hiện tính trừu tượng 100% (Java < 8). |
Lớp trừu tượng có thể có các phương thức abstract và non-abstract |
Phiên bản Java < 8, Interface chỉ có thể có phương thức abstract.
Phiên bản Java 8, có thể thêm default và static methods.
Phiên bản Java 9, có thể thêm private methods. |
Lớp trừu tượng không hỗ trợ đa kế thừa |
Interface hỗ trợ đa kế thừa |
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 final |
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 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 |
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 |
Ví dụ:
public abstract class Shape {
public abstract void draw();
} |
Ví dụ:
public interface Drawable {
void draw();
} |
Sử dụng Abstract class khi chúng ta chỉ có thể hoàn thành một vài chức năng (method/ function) chuẩn của hệ thống, một vài chức năng còn lại các lớp extends phải hoàn thành. Những tính năng đã hoàn thành này vẫn sử dụng như bình thường, đây là những tính năng chung. |
Sử dụng Interface khi bạn muốn tạo dựng một bộ khung chuẩn gồm các chức năng (method/ function) mà tất cả module/ project cần phải có. Các module phải implements tất cả chức năng đã được định nghĩa. |