Nội dung chính
Sự khác nhau giữa Abstract class và Interface
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:
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 java
Ví 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 { void a(); abstract void b(); public void c(); public abstract void d(); } // 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 { public void c() { System.out.println("I am C"); } } // 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 { public void a() { System.out.println("I am a"); } public void b() { System.out.println("I am b"); } public void d() { System.out.println("I am d"); } } // tạo lớp Test5 để gọi các phương thức của interface A public class Test5 { public static void main(String args[]) { A a = new M(); a.a(); a.b(); a.c(); a.d(); } }
Output:
I am a I am b I am C I am d