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 Interface1) 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.
interface A { void a(); abstract void b(); public void c(); public abstract void d(); } abstract class B implements A { public void c() { System.out.println("I am C"); } } 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"); } } 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