11/08/2018, 19:06

Sự khác nhau giữa Abstract class và Interface

Interface trong java 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ê ...

Interface trong java

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
Interface trong java
0