Interface trong java với ví dụ cụ thể

Ở bài trước chúng ta đã tìm hiểu về abstract class được sử dụng để triển khai tính trừu tượng trong java.

Không giống như abstract class, interface được sử dụng để biểu diễn 100% tính trừu tượng. Trong một interface các method sẽ mặc định là abstract method. Nói đến interface chúng ta sẽ nhìn nhận nó như là một khuôn mẫu các hành động được cung cấp mà bạn không thể biết bên trong nó thực hiện như thế nào.

Cách sử dụng interface trong java

Như phần ở trên, interface được sử dụng để biểu diễn 100% tính trừu tượng. 

Các method trong interface mặc định đều là asbtract method. 

Trước mỗi method trong interface đều mặc định được thêm vào trước cặp từ khoá public static.

Các class implement interface phải implement tất cả các method được khai báo trong interface.

Các class trong java không được extends nhiều class, nhưng với có thể implement nhiều interface khác nhau.

Cú pháp khai báo interface

interface MyInterface
{
   /* Tất các các method đều mặc định thêm public abstract method.
    * Các method không có thân hàm
    */
   public void method1();
   public void method2();
}

Ví dụ: Chúng ta có interface Mail chứa các method sendMail(), log(). Class MailImpl sẽ implement Mail và triển khai các method mà Mail khai báo.

// File Mail.java
public interface Mail {
    void sendMail();
    void log();
}
// File MailImpl.java
public class MailImpl implements Mail {
    @Override
    public void sendMail() {
        System.out.println("Sending email");
    }

    @Override
    public void log() {
        System.out.println("Log!!!");
    }
}
// File Main.java
public class Main {
    public static void main(String[] args) {
        Mail mail = new MailImpl();

        mail.sendMail();
        mail.log();
    }
}

Output:

Sending email
Log!!!

Đa thừa kế trong interface 

Trong java, các class thông thường thì chỉ được phép extends từ một class cha duy nhất có thể là một class khác hoặc abstract class. Thế nhưng trong interface chúng ta có thể extends nhiều interface khác.

Ví dụ chúng ta có 3 interface A, B, C. C sẽ extends từ A, B. InterfaceImpl sẽ implement C. đồng nghĩa với việc nó sẽ implement các method được định nghĩa trong cả 3 interface A, B, C.

// File A.java
public interface A {
    void a();
}
// File B.java
public interface B {
    void b();
}
// File C.java
public interface C extends A, B {
    void c();
}
public class InterfaceImpl implements C {
    @Override
    public void c() {
        System.out.println("C");
    }

    @Override
    public void a() {
        System.out.println("A");
    }

    @Override
    public void b() {
        System.out.println("C");
    }
}
// File Main.java
public class Main {
    public static void main(String[] args) {
        C c = new InterfaceImpl();
        c.a();
        c.b();
        c.c();
    }
}

Output: 

A
B
C

Đặt câu hỏi nếu có abstract method được định nghĩa ở cả interface cha và con. Nếu một class implement interface con thì sẽ triển khai hàm nào? Câu trả lời là hàm nào cũng được ha.

Ví dụ

// File A.java
public interface A {
    void demo();
}
public interface C extends A{
    void demo();
}
// File InterfaceImpl.java
public class InterfaceImpl implements C {
    @Override
    public void demo() {
        System.out.println("Demo");
    }
}
// File Main.java
public class Main {
    public static void main(String[] args) {
        C c = new InterfaceImpl();
        c.demo();
    }
}

Outout: Demo

Tag và Marker interface trong java

Một interface không chứa bất kỳ một method hay thuộc tính nào gọi là Tag hoặc Marker interface. Ví dụ Serializable, EventListener etc.

Functional Interface

Functional Interface là một interface chứa duy nhất một abstract method. Từ java 8 trở đi lambda expressions được sử dụng nhiều với functional interface để thể hiện một implement của nó.

Một functional interface có thể có nhiều default method, static method, nên các bạn đừng nhầm tưởng rằng functional interface lại có nhiều method thế kia nhé, nó chỉ có một abstract method duy nhất thôi!

Interface note:

Một interface không thể khởi tạo. Nghĩa là bạn không thể khởi tạo một object của interface.

Interface cung cấp 100% tính trừu tượng với các method mặc định là abstract method.

Class sử dụng từ khoá implement để implement một interface.

Các class implement một interface bắt buộc phải triển khai tất cả các method được khai báo trong interface. 

Interface không để khai báo với từ khoá private hoặc protected 

private interface A;
// Hoặc
protected interface A

Các khởi tạo trên là không được phép.

Trong interface các biến mặc định là public, static và final 

interface A
{
   int a=10;
   public int a=10;
   public static final int a=10;
   final int a=10;
   static int a=0;
}

Các cách khai báo trên là giống như và nó sẽ đều là 

public static final int a=10;

Nguồn tham khảo 

https://www.geeksforgeeks.org/interfaces-in-java/

Interface in java with example programs

Các bài viết liên quan

0 0 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x